From 86eca8dee7402d21a9c67fb8e7c3a5a0d0fc4e96 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 5 Dec 2024 00:23:35 -0500 Subject: [PATCH] Use string builders where possible --- CHANGELIST.md | 1 + .../Aaru/ExecutionContext.cs | 195 +++++++++--------- .../DiscImageCreator/ExecutionContext.cs | 146 ++++++------- .../Redumper/ExecutionContext.cs | 89 ++++---- 4 files changed, 218 insertions(+), 213 deletions(-) diff --git a/CHANGELIST.md b/CHANGELIST.md index 3ab18768..8c1afc97 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -33,6 +33,7 @@ - Let inputs read equal-separated values - Fix some formatting issues with Input types - Replace Aaru pre-command flags +- Use string builders where possible ### 3.2.4 (2024-11-24) diff --git a/MPF.ExecutionContexts/Aaru/ExecutionContext.cs b/MPF.ExecutionContexts/Aaru/ExecutionContext.cs index a35813b6..fbd66c3b 100644 --- a/MPF.ExecutionContexts/Aaru/ExecutionContext.cs +++ b/MPF.ExecutionContexts/Aaru/ExecutionContext.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text; using MPF.ExecutionContexts.Data; using SabreTools.RedumpLib.Data; @@ -540,7 +541,7 @@ namespace MPF.ExecutionContexts.Aaru /// public override string? GenerateParameters() { - var parameters = new List(); + var parameters = new StringBuilder(); #region Pre-command flags @@ -552,14 +553,14 @@ namespace MPF.ExecutionContexts.Aaru continue; // Append the parameter - parameters.Add(formatted); + parameters.Append($"{formatted} "); } #endregion BaseCommand ??= CommandStrings.NONE; if (!string.IsNullOrEmpty(BaseCommand)) - parameters.Add(BaseCommand); + parameters.Append($"{BaseCommand} "); else return null; @@ -569,329 +570,329 @@ namespace MPF.ExecutionContexts.Aaru if (IsFlagSupported(FlagStrings.Adler32Long)) { if (this[FlagStrings.Adler32Long] != null) - parameters.Add($"{FlagStrings.Adler32Long} {this[FlagStrings.Adler32Long]}"); + parameters.Append($"{FlagStrings.Adler32Long} {this[FlagStrings.Adler32Long]} "); } // Clear if (IsFlagSupported(FlagStrings.ClearLong)) { if (this[FlagStrings.ClearLong] != null) - parameters.Add($"{FlagStrings.ClearLong} {this[FlagStrings.ClearLong]}"); + parameters.Append($"{FlagStrings.ClearLong} {this[FlagStrings.ClearLong]} "); } // Clear All if (IsFlagSupported(FlagStrings.ClearAllLong)) { if (this[FlagStrings.ClearAllLong] != null) - parameters.Add($"{FlagStrings.ClearAllLong} {this[FlagStrings.ClearAllLong]}"); + parameters.Append($"{FlagStrings.ClearAllLong} {this[FlagStrings.ClearAllLong]} "); } // CRC16 if (IsFlagSupported(FlagStrings.CRC16Long)) { if (this[FlagStrings.CRC16Long] != null) - parameters.Add($"{FlagStrings.CRC16Long} {this[FlagStrings.CRC16Long]}"); + parameters.Append($"{FlagStrings.CRC16Long} {this[FlagStrings.CRC16Long]} "); } // CRC32 if (IsFlagSupported(FlagStrings.CRC32Long)) { if (this[FlagStrings.CRC32Long] != null) - parameters.Add($"{FlagStrings.CRC32Long} {this[FlagStrings.CRC32Long]}"); + parameters.Append($"{FlagStrings.CRC32Long} {this[FlagStrings.CRC32Long]} "); } // CRC64 if (IsFlagSupported(FlagStrings.CRC64Long)) { if (this[FlagStrings.CRC64Long] != null) - parameters.Add($"{FlagStrings.CRC64Long} {this[FlagStrings.CRC64Long]}"); + parameters.Append($"{FlagStrings.CRC64Long} {this[FlagStrings.CRC64Long]} "); } // Disk Tags if (IsFlagSupported(FlagStrings.DiskTagsLong)) { if (this[FlagStrings.DiskTagsLong] != null) - parameters.Add($"{FlagStrings.DiskTagsLong} {this[FlagStrings.DiskTagsLong]}"); + parameters.Append($"{FlagStrings.DiskTagsLong} {this[FlagStrings.DiskTagsLong]} "); } // Duplicated Sectors if (IsFlagSupported(FlagStrings.DuplicatedSectorsLong)) { if (this[FlagStrings.DuplicatedSectorsLong] != null) - parameters.Add($"{FlagStrings.DuplicatedSectorsLong} {this[FlagStrings.DuplicatedSectorsLong]}"); + parameters.Append($"{FlagStrings.DuplicatedSectorsLong} {this[FlagStrings.DuplicatedSectorsLong]} "); } // Eject if (IsFlagSupported(FlagStrings.EjectLong)) { if (this[FlagStrings.EjectLong] != null) - parameters.Add($"{FlagStrings.EjectLong} {this[FlagStrings.EjectLong]}"); + parameters.Append($"{FlagStrings.EjectLong} {this[FlagStrings.EjectLong]} "); } // Extended Attributes if (IsFlagSupported(FlagStrings.ExtendedAttributesLong)) { if (this[FlagStrings.ExtendedAttributesLong] != null) - parameters.Add($"{FlagStrings.ExtendedAttributesLong} {this[FlagStrings.ExtendedAttributesLong]}"); + parameters.Append($"{FlagStrings.ExtendedAttributesLong} {this[FlagStrings.ExtendedAttributesLong]} "); } // Filesystems if (IsFlagSupported(FlagStrings.FilesystemsLong)) { if (this[FlagStrings.FilesystemsLong] != null) - parameters.Add($"{FlagStrings.FilesystemsLong} {this[FlagStrings.FilesystemsLong]}"); + parameters.Append($"{FlagStrings.FilesystemsLong} {this[FlagStrings.FilesystemsLong]} "); } // First Pregap if (IsFlagSupported(FlagStrings.FirstPregapLong)) { if (this[FlagStrings.FirstPregapLong] != null) - parameters.Add($"{FlagStrings.FirstPregapLong} {this[FlagStrings.FirstPregapLong]}"); + parameters.Append($"{FlagStrings.FirstPregapLong} {this[FlagStrings.FirstPregapLong]} "); } // Fix Offset if (IsFlagSupported(FlagStrings.FixOffsetLong)) { if (this[FlagStrings.FixOffsetLong] != null) - parameters.Add($"{FlagStrings.FixOffsetLong} {this[FlagStrings.FixOffsetLong]}"); + parameters.Append($"{FlagStrings.FixOffsetLong} {this[FlagStrings.FixOffsetLong]} "); } // Fix Subchannel if (IsFlagSupported(FlagStrings.FixSubchannelLong)) { if (this[FlagStrings.FixSubchannelLong] != null) - parameters.Add($"{FlagStrings.FixSubchannelLong} {this[FlagStrings.FixSubchannelLong]}"); + parameters.Append($"{FlagStrings.FixSubchannelLong} {this[FlagStrings.FixSubchannelLong]} "); } // Fix Subchannel CRC if (IsFlagSupported(FlagStrings.FixSubchannelCrcLong)) { if (this[FlagStrings.FixSubchannelCrcLong] != null) - parameters.Add($"{FlagStrings.FixSubchannelCrcLong} {this[FlagStrings.FixSubchannelCrcLong]}"); + parameters.Append($"{FlagStrings.FixSubchannelCrcLong} {this[FlagStrings.FixSubchannelCrcLong]} "); } // Fix Subchannel Position if (IsFlagSupported(FlagStrings.FixSubchannelPositionLong)) { if (this[FlagStrings.FixSubchannelPositionLong] != null) - parameters.Add($"{FlagStrings.FixSubchannelPositionLong} {this[FlagStrings.FixSubchannelPositionLong]}"); + parameters.Append($"{FlagStrings.FixSubchannelPositionLong} {this[FlagStrings.FixSubchannelPositionLong]} "); } // Fletcher-16 if (IsFlagSupported(FlagStrings.Fletcher16Long)) { if (this[FlagStrings.Fletcher16Long] != null) - parameters.Add($"{FlagStrings.Fletcher16Long} {this[FlagStrings.Fletcher16Long]}"); + parameters.Append($"{FlagStrings.Fletcher16Long} {this[FlagStrings.Fletcher16Long]} "); } // Fletcher-32 if (IsFlagSupported(FlagStrings.Fletcher32Long)) { if (this[FlagStrings.Fletcher32Long] != null) - parameters.Add($"{FlagStrings.Fletcher32Long} {this[FlagStrings.Fletcher32Long]}"); + parameters.Append($"{FlagStrings.Fletcher32Long} {this[FlagStrings.Fletcher32Long]} "); } // Force if (IsFlagSupported(FlagStrings.ForceLong)) { if (this[FlagStrings.ForceLong] != null) - parameters.Add($"{FlagStrings.ForceLong} {this[FlagStrings.ForceLong]}"); + parameters.Append($"{FlagStrings.ForceLong} {this[FlagStrings.ForceLong]} "); } // Generate Subchannels if (IsFlagSupported(FlagStrings.GenerateSubchannelsLong)) { if (this[FlagStrings.GenerateSubchannelsLong] != null) - parameters.Add($"{FlagStrings.GenerateSubchannelsLong} {this[FlagStrings.GenerateSubchannelsLong]}"); + parameters.Append($"{FlagStrings.GenerateSubchannelsLong} {this[FlagStrings.GenerateSubchannelsLong]} "); } // Long Format if (IsFlagSupported(FlagStrings.LongFormatLong)) { if (this[FlagStrings.LongFormatLong] != null) - parameters.Add($"{FlagStrings.LongFormatLong} {this[FlagStrings.LongFormatLong]}"); + parameters.Append($"{FlagStrings.LongFormatLong} {this[FlagStrings.LongFormatLong]} "); } // Long Sectors if (IsFlagSupported(FlagStrings.LongSectorsLong)) { if (this[FlagStrings.LongSectorsLong] != null) - parameters.Add($"{FlagStrings.LongSectorsLong} {this[FlagStrings.LongSectorsLong]}"); + parameters.Append($"{FlagStrings.LongSectorsLong} {this[FlagStrings.LongSectorsLong]} "); } // MD5 if (IsFlagSupported(FlagStrings.MD5Long)) { if (this[FlagStrings.MD5Long] != null) - parameters.Add($"{FlagStrings.MD5Long} {this[FlagStrings.MD5Long]}"); + parameters.Append($"{FlagStrings.MD5Long} {this[FlagStrings.MD5Long]} "); } // Metadata if (IsFlagSupported(FlagStrings.MetadataLong)) { if (this[FlagStrings.MetadataLong] != null) - parameters.Add($"{FlagStrings.MetadataLong} {this[FlagStrings.MetadataLong]}"); + parameters.Append($"{FlagStrings.MetadataLong} {this[FlagStrings.MetadataLong]} "); } // Partitions if (IsFlagSupported(FlagStrings.PartitionsLong)) { if (this[FlagStrings.PartitionsLong] != null) - parameters.Add($"{FlagStrings.PartitionsLong} {this[FlagStrings.PartitionsLong]}"); + parameters.Append($"{FlagStrings.PartitionsLong} {this[FlagStrings.PartitionsLong]} "); } // Persistent if (IsFlagSupported(FlagStrings.PersistentLong)) { if (this[FlagStrings.PersistentLong] != null) - parameters.Add($"{FlagStrings.PersistentLong} {this[FlagStrings.PersistentLong]}"); + parameters.Append($"{FlagStrings.PersistentLong} {this[FlagStrings.PersistentLong]} "); } // Private if (IsFlagSupported(FlagStrings.PrivateLong)) { if (this[FlagStrings.PrivateLong] != null) - parameters.Add($"{FlagStrings.PrivateLong} {this[FlagStrings.PrivateLong]}"); + parameters.Append($"{FlagStrings.PrivateLong} {this[FlagStrings.PrivateLong]} "); } // Resume if (IsFlagSupported(FlagStrings.ResumeLong)) { if (this[FlagStrings.ResumeLong] != null) - parameters.Add($"{FlagStrings.ResumeLong} {this[FlagStrings.ResumeLong]}"); + parameters.Append($"{FlagStrings.ResumeLong} {this[FlagStrings.ResumeLong]} "); } // Retry Subchannel if (IsFlagSupported(FlagStrings.RetrySubchannelLong)) { if (this[FlagStrings.RetrySubchannelLong] != null) - parameters.Add($"{FlagStrings.RetrySubchannelLong} {this[FlagStrings.RetrySubchannelLong]}"); + parameters.Append($"{FlagStrings.RetrySubchannelLong} {this[FlagStrings.RetrySubchannelLong]} "); } // Sector Tags if (IsFlagSupported(FlagStrings.SectorTagsLong)) { if (this[FlagStrings.SectorTagsLong] != null) - parameters.Add($"{FlagStrings.SectorTagsLong} {this[FlagStrings.SectorTagsLong]}"); + parameters.Append($"{FlagStrings.SectorTagsLong} {this[FlagStrings.SectorTagsLong]} "); } // Separated Tracks if (IsFlagSupported(FlagStrings.SeparatedTracksLong)) { if (this[FlagStrings.SeparatedTracksLong] != null) - parameters.Add($"{FlagStrings.SeparatedTracksLong} {this[FlagStrings.SeparatedTracksLong]}"); + parameters.Append($"{FlagStrings.SeparatedTracksLong} {this[FlagStrings.SeparatedTracksLong]} "); } // SHA-1 if (IsFlagSupported(FlagStrings.SHA1Long)) { if (this[FlagStrings.SHA1Long] != null) - parameters.Add($"{FlagStrings.SHA1Long} {this[FlagStrings.SHA1Long]}"); + parameters.Append($"{FlagStrings.SHA1Long} {this[FlagStrings.SHA1Long]} "); } // SHA-256 if (IsFlagSupported(FlagStrings.SHA256Long)) { if (this[FlagStrings.SHA256Long] != null) - parameters.Add($"{FlagStrings.SHA256Long} {this[FlagStrings.SHA256Long]}"); + parameters.Append($"{FlagStrings.SHA256Long} {this[FlagStrings.SHA256Long]} "); } // SHA-384 if (IsFlagSupported(FlagStrings.SHA384Long)) { if (this[FlagStrings.SHA384Long] != null) - parameters.Add($"{FlagStrings.SHA384Long} {this[FlagStrings.SHA384Long]}"); + parameters.Append($"{FlagStrings.SHA384Long} {this[FlagStrings.SHA384Long]} "); } // SHA-512 if (IsFlagSupported(FlagStrings.SHA512Long)) { if (this[FlagStrings.SHA512Long] != null) - parameters.Add($"{FlagStrings.SHA512Long} {this[FlagStrings.SHA512Long]}"); + parameters.Append($"{FlagStrings.SHA512Long} {this[FlagStrings.SHA512Long]} "); } // Skip CD-i Ready Hole if (IsFlagSupported(FlagStrings.SkipCdiReadyHoleLong)) { if (this[FlagStrings.SkipCdiReadyHoleLong] != null) - parameters.Add($"{FlagStrings.SkipCdiReadyHoleLong} {this[FlagStrings.SkipCdiReadyHoleLong]}"); + parameters.Append($"{FlagStrings.SkipCdiReadyHoleLong} {this[FlagStrings.SkipCdiReadyHoleLong]} "); } // SpamSum if (IsFlagSupported(FlagStrings.SpamSumLong)) { if (this[FlagStrings.SpamSumLong] != null) - parameters.Add($"{FlagStrings.SpamSumLong} {this[FlagStrings.SpamSumLong]}"); + parameters.Append($"{FlagStrings.SpamSumLong} {this[FlagStrings.SpamSumLong]} "); } // Stop on Error if (IsFlagSupported(FlagStrings.StopOnErrorLong)) { if (this[FlagStrings.StopOnErrorLong] != null) - parameters.Add($"{FlagStrings.StopOnErrorLong} {this[FlagStrings.StopOnErrorLong]}"); + parameters.Append($"{FlagStrings.StopOnErrorLong} {this[FlagStrings.StopOnErrorLong]} "); } // Stop on Error if (IsFlagSupported(FlagStrings.StoreEncryptedLong)) { if (this[FlagStrings.StoreEncryptedLong] != null) - parameters.Add($"{FlagStrings.StoreEncryptedLong} {this[FlagStrings.StoreEncryptedLong]}"); + parameters.Append($"{FlagStrings.StoreEncryptedLong} {this[FlagStrings.StoreEncryptedLong]} "); } // Tape if (IsFlagSupported(FlagStrings.TapeLong)) { if (this[FlagStrings.TapeLong] != null) - parameters.Add($"{FlagStrings.TapeLong} {this[FlagStrings.TapeLong]}"); + parameters.Append($"{FlagStrings.TapeLong} {this[FlagStrings.TapeLong]} "); } // Title Keys if (IsFlagSupported(FlagStrings.TitleKeysLong)) { if (this[FlagStrings.TitleKeysLong] != null) - parameters.Add($"{FlagStrings.TitleKeysLong} {this[FlagStrings.TitleKeysLong]}"); + parameters.Append($"{FlagStrings.TitleKeysLong} {this[FlagStrings.TitleKeysLong]} "); } // Trap Disc if (IsFlagSupported(FlagStrings.TrapDiscLong)) { if (this[FlagStrings.TrapDiscLong] != null) - parameters.Add($"{FlagStrings.TrapDiscLong} {this[FlagStrings.TrapDiscLong]}"); + parameters.Append($"{FlagStrings.TrapDiscLong} {this[FlagStrings.TrapDiscLong]} "); } // Trim if (IsFlagSupported(FlagStrings.TrimLong)) { if (this[FlagStrings.TrimLong] != null) - parameters.Add($"{FlagStrings.TrimLong} {this[FlagStrings.TrimLong]}"); + parameters.Append($"{FlagStrings.TrimLong} {this[FlagStrings.TrimLong]} "); } // Use Buffered Reads if (IsFlagSupported(FlagStrings.UseBufferedReadsLong)) { if (this[FlagStrings.UseBufferedReadsLong] != null) - parameters.Add($"{FlagStrings.UseBufferedReadsLong} {this[FlagStrings.UseBufferedReadsLong]}"); + parameters.Append($"{FlagStrings.UseBufferedReadsLong} {this[FlagStrings.UseBufferedReadsLong]} "); } // Verify Disc if (IsFlagSupported(FlagStrings.VerifyDiscLong)) { if (this[FlagStrings.VerifyDiscLong] != null) - parameters.Add($"{FlagStrings.VerifyDiscLong} {this[FlagStrings.VerifyDiscLong]}"); + parameters.Append($"{FlagStrings.VerifyDiscLong} {this[FlagStrings.VerifyDiscLong]} "); } // Verify Sectors if (IsFlagSupported(FlagStrings.VerifySectorsLong)) { if (this[FlagStrings.VerifySectorsLong] != null) - parameters.Add($"{FlagStrings.VerifySectorsLong} {this[FlagStrings.VerifySectorsLong]}"); + parameters.Append($"{FlagStrings.VerifySectorsLong} {this[FlagStrings.VerifySectorsLong]} "); } // Whole Disc if (IsFlagSupported(FlagStrings.WholeDiscLong)) { if (this[FlagStrings.WholeDiscLong] != null) - parameters.Add($"{FlagStrings.WholeDiscLong} {this[FlagStrings.WholeDiscLong]}"); + parameters.Append($"{FlagStrings.WholeDiscLong} {this[FlagStrings.WholeDiscLong]} "); } #endregion @@ -902,7 +903,7 @@ namespace MPF.ExecutionContexts.Aaru if (IsFlagSupported(FlagStrings.SpeedLong)) { if (this[FlagStrings.SpeedLong] == true && SpeedValue != null) - parameters.Add($"{FlagStrings.SpeedLong} {SpeedValue}"); + parameters.Append($"{FlagStrings.SpeedLong} {SpeedValue} "); } #endregion @@ -913,14 +914,14 @@ namespace MPF.ExecutionContexts.Aaru if (IsFlagSupported(FlagStrings.RetryPassesLong)) { if (this[FlagStrings.RetryPassesLong] == true && RetryPassesValue != null) - parameters.Add($"{FlagStrings.RetryPassesLong} {RetryPassesValue}"); + parameters.Append($"{FlagStrings.RetryPassesLong} {RetryPassesValue} "); } // Width if (IsFlagSupported(FlagStrings.WidthLong)) { if (this[FlagStrings.WidthLong] == true && WidthValue != null) - parameters.Add($"{FlagStrings.WidthLong} {WidthValue}"); + parameters.Append($"{FlagStrings.WidthLong} {WidthValue} "); } #endregion @@ -931,42 +932,42 @@ namespace MPF.ExecutionContexts.Aaru if (IsFlagSupported(FlagStrings.BlockSizeLong)) { if (this[FlagStrings.BlockSizeLong] == true && BlockSizeValue != null) - parameters.Add($"{FlagStrings.BlockSizeLong} {BlockSizeValue}"); + parameters.Append($"{FlagStrings.BlockSizeLong} {BlockSizeValue} "); } // Count if (IsFlagSupported(FlagStrings.CountLong)) { if (this[FlagStrings.CountLong] == true && CountValue != null) - parameters.Add($"{FlagStrings.CountLong} {CountValue}"); + parameters.Append($"{FlagStrings.CountLong} {CountValue} "); } // Max Blocks if (IsFlagSupported(FlagStrings.MaxBlocksLong)) { if (this[FlagStrings.MaxBlocksLong] == true && MaxBlocksValue != null) - parameters.Add($"{FlagStrings.MaxBlocksLong} {MaxBlocksValue}"); + parameters.Append($"{FlagStrings.MaxBlocksLong} {MaxBlocksValue} "); } // Media Last Sequence if (IsFlagSupported(FlagStrings.MediaLastSequenceLong)) { if (this[FlagStrings.MediaLastSequenceLong] == true && MediaLastSequenceValue != null) - parameters.Add($"{FlagStrings.MediaLastSequenceLong} {MediaLastSequenceValue}"); + parameters.Append($"{FlagStrings.MediaLastSequenceLong} {MediaLastSequenceValue} "); } // Media Sequence if (IsFlagSupported(FlagStrings.MediaSequenceLong)) { if (this[FlagStrings.MediaSequenceLong] == true && MediaSequenceValue != null) - parameters.Add($"{FlagStrings.MediaSequenceLong} {MediaSequenceValue}"); + parameters.Append($"{FlagStrings.MediaSequenceLong} {MediaSequenceValue} "); } // Skip if (IsFlagSupported(FlagStrings.SkipLong)) { if (this[FlagStrings.SkipLong] == true && SkipValue != null) - parameters.Add($"{FlagStrings.SkipLong} {SkipValue}"); + parameters.Append($"{FlagStrings.SkipLong} {SkipValue} "); } #endregion @@ -979,9 +980,9 @@ namespace MPF.ExecutionContexts.Aaru if (this[FlagStrings.LengthLong] == true && LengthValue != null) { if (LengthValue >= 0) - parameters.Add($"{FlagStrings.LengthLong} {LengthValue}"); + parameters.Append($"{FlagStrings.LengthLong} {LengthValue} "); else if (LengthValue == -1 && BaseCommand == CommandStrings.ImageDecode) - parameters.Add($"{FlagStrings.LengthLong} all"); + parameters.Append($"{FlagStrings.LengthLong} all "); } } @@ -989,7 +990,7 @@ namespace MPF.ExecutionContexts.Aaru if (IsFlagSupported(FlagStrings.StartLong)) { if (this[FlagStrings.StartLong] == true && StartValue != null) - parameters.Add($"{FlagStrings.StartLong} {StartValue}"); + parameters.Append($"{FlagStrings.StartLong} {StartValue} "); } #endregion @@ -1000,168 +1001,168 @@ namespace MPF.ExecutionContexts.Aaru if (IsFlagSupported(FlagStrings.CommentsLong)) { if (this[FlagStrings.CommentsLong] == true && CommentsValue != null) - parameters.Add($"{FlagStrings.CommentsLong} \"{CommentsValue}\""); + parameters.Append($"{FlagStrings.CommentsLong} \"{CommentsValue}\" "); } // Creator if (IsFlagSupported(FlagStrings.CreatorLong)) { if (this[FlagStrings.CreatorLong] == true && CreatorValue != null) - parameters.Add($"{FlagStrings.CreatorLong} \"{CreatorValue}\""); + parameters.Append($"{FlagStrings.CreatorLong} \"{CreatorValue}\" "); } // Drive Manufacturer if (IsFlagSupported(FlagStrings.DriveManufacturerLong)) { if (this[FlagStrings.DriveManufacturerLong] == true && DriveManufacturerValue != null) - parameters.Add($"{FlagStrings.DriveManufacturerLong} \"{DriveManufacturerValue}\""); + parameters.Append($"{FlagStrings.DriveManufacturerLong} \"{DriveManufacturerValue}\" "); } // Drive Model if (IsFlagSupported(FlagStrings.DriveModelLong)) { if (this[FlagStrings.DriveModelLong] == true && DriveModelValue != null) - parameters.Add($"{FlagStrings.DriveModelLong} \"{DriveModelValue}\""); + parameters.Append($"{FlagStrings.DriveModelLong} \"{DriveModelValue}\" "); } // Drive Revision if (IsFlagSupported(FlagStrings.DriveRevisionLong)) { if (this[FlagStrings.DriveRevisionLong] == true && DriveRevisionValue != null) - parameters.Add($"{FlagStrings.DriveRevisionLong} \"{DriveRevisionValue}\""); + parameters.Append($"{FlagStrings.DriveRevisionLong} \"{DriveRevisionValue}\" "); } // Drive Serial if (IsFlagSupported(FlagStrings.DriveSerialLong)) { if (this[FlagStrings.DriveSerialLong] == true && DriveSerialValue != null) - parameters.Add($"{FlagStrings.DriveSerialLong} \"{DriveSerialValue}\""); + parameters.Append($"{FlagStrings.DriveSerialLong} \"{DriveSerialValue}\" "); } // Encoding if (IsFlagSupported(FlagStrings.EncodingLong)) { if (this[FlagStrings.EncodingLong] == true && EncodingValue != null) - parameters.Add($"{FlagStrings.EncodingLong} \"{EncodingValue}\""); + parameters.Append($"{FlagStrings.EncodingLong} \"{EncodingValue}\" "); } // Format (Convert) if (IsFlagSupported(FlagStrings.FormatConvertLong)) { if (this[FlagStrings.FormatConvertLong] == true && FormatConvertValue != null) - parameters.Add($"{FlagStrings.FormatConvertLong} \"{FormatConvertValue}\""); + parameters.Append($"{FlagStrings.FormatConvertLong} \"{FormatConvertValue}\" "); } // Format (Dump) if (IsFlagSupported(FlagStrings.FormatDumpLong)) { if (this[FlagStrings.FormatDumpLong] == true && FormatDumpValue != null) - parameters.Add($"{FlagStrings.FormatDumpLong} \"{FormatDumpValue}\""); + parameters.Append($"{FlagStrings.FormatDumpLong} \"{FormatDumpValue}\" "); } // Geometry if (IsFlagSupported(FlagStrings.GeometryLong)) { if (this[FlagStrings.GeometryLong] == true && GeometryValue != null) - parameters.Add($"{FlagStrings.GeometryLong} \"{GeometryValue}\""); + parameters.Append($"{FlagStrings.GeometryLong} \"{GeometryValue}\" "); } // ImgBurn Log if (IsFlagSupported(FlagStrings.ImgBurnLogLong)) { if (this[FlagStrings.ImgBurnLogLong] == true && ImgBurnLogValue != null) - parameters.Add($"{FlagStrings.ImgBurnLogLong} \"{ImgBurnLogValue}\""); + parameters.Append($"{FlagStrings.ImgBurnLogLong} \"{ImgBurnLogValue}\" "); } // Media Barcode if (IsFlagSupported(FlagStrings.MediaBarcodeLong)) { if (this[FlagStrings.MediaBarcodeLong] == true && MediaBarcodeValue != null) - parameters.Add($"{FlagStrings.MediaBarcodeLong} \"{MediaBarcodeValue}\""); + parameters.Append($"{FlagStrings.MediaBarcodeLong} \"{MediaBarcodeValue}\" "); } // Media Manufacturer if (IsFlagSupported(FlagStrings.MediaManufacturerLong)) { if (this[FlagStrings.MediaManufacturerLong] == true && MediaManufacturerValue != null) - parameters.Add($"{FlagStrings.MediaManufacturerLong} \"{MediaManufacturerValue}\""); + parameters.Append($"{FlagStrings.MediaManufacturerLong} \"{MediaManufacturerValue}\" "); } // Media Model if (IsFlagSupported(FlagStrings.MediaModelLong)) { if (this[FlagStrings.MediaModelLong] == true && MediaModelValue != null) - parameters.Add($"{FlagStrings.MediaModelLong} \"{MediaModelValue}\""); + parameters.Append($"{FlagStrings.MediaModelLong} \"{MediaModelValue}\" "); } // Media Part Number if (IsFlagSupported(FlagStrings.MediaPartNumberLong)) { if (this[FlagStrings.MediaPartNumberLong] == true && MediaPartNumberValue != null) - parameters.Add($"{FlagStrings.MediaPartNumberLong} \"{MediaPartNumberValue}\""); + parameters.Append($"{FlagStrings.MediaPartNumberLong} \"{MediaPartNumberValue}\" "); } // Media Serial if (IsFlagSupported(FlagStrings.MediaSerialLong)) { if (this[FlagStrings.MediaSerialLong] == true && MediaSerialValue != null) - parameters.Add($"{FlagStrings.MediaSerialLong} \"{MediaSerialValue}\""); + parameters.Append($"{FlagStrings.MediaSerialLong} \"{MediaSerialValue}\" "); } // Media Title if (IsFlagSupported(FlagStrings.MediaTitleLong)) { if (this[FlagStrings.MediaTitleLong] == true && MediaTitleValue != null) - parameters.Add($"{FlagStrings.MediaTitleLong} \"{MediaTitleValue}\""); + parameters.Append($"{FlagStrings.MediaTitleLong} \"{MediaTitleValue}\" "); } // MHDD Log if (IsFlagSupported(FlagStrings.MHDDLogLong)) { if (this[FlagStrings.MHDDLogLong] == true && MHDDLogValue != null) - parameters.Add($"{FlagStrings.MHDDLogLong} \"{MHDDLogValue}\""); + parameters.Append($"{FlagStrings.MHDDLogLong} \"{MHDDLogValue}\" "); } // Namespace if (IsFlagSupported(FlagStrings.NamespaceLong)) { if (this[FlagStrings.NamespaceLong] == true && NamespaceValue != null) - parameters.Add($"{FlagStrings.NamespaceLong} \"{NamespaceValue}\""); + parameters.Append($"{FlagStrings.NamespaceLong} \"{NamespaceValue}\" "); } // Options if (IsFlagSupported(FlagStrings.OptionsLong)) { if (this[FlagStrings.OptionsLong] == true && OptionsValue != null) - parameters.Add($"{FlagStrings.OptionsLong} \"{OptionsValue}\""); + parameters.Append($"{FlagStrings.OptionsLong} \"{OptionsValue}\" "); } // Output Prefix if (IsFlagSupported(FlagStrings.OutputPrefixLong)) { if (this[FlagStrings.OutputPrefixLong] == true && OutputPrefixValue != null) - parameters.Add($"{FlagStrings.OutputPrefixLong} \"{OutputPrefixValue}\""); + parameters.Append($"{FlagStrings.OutputPrefixLong} \"{OutputPrefixValue}\" "); } // Resume File if (IsFlagSupported(FlagStrings.ResumeFileLong)) { if (this[FlagStrings.ResumeFileLong] == true && ResumeFileValue != null) - parameters.Add($"{FlagStrings.ResumeFileLong} \"{ResumeFileValue}\""); + parameters.Append($"{FlagStrings.ResumeFileLong} \"{ResumeFileValue}\" "); } // Subchannel if (IsFlagSupported(FlagStrings.SubchannelLong)) { if (this[FlagStrings.SubchannelLong] == true && SubchannelValue != null) - parameters.Add($"{FlagStrings.SubchannelLong} \"{SubchannelValue}\""); + parameters.Append($"{FlagStrings.SubchannelLong} \"{SubchannelValue}\" "); } // XML Sidecar if (IsFlagSupported(FlagStrings.XMLSidecarLong)) { if (this[FlagStrings.XMLSidecarLong] == true && XMLSidecarValue != null) - parameters.Add($"{FlagStrings.XMLSidecarLong} \"{XMLSidecarValue}\""); + parameters.Append($"{FlagStrings.XMLSidecarLong} \"{XMLSidecarValue}\" "); } #endregion @@ -1183,7 +1184,7 @@ namespace MPF.ExecutionContexts.Aaru if (string.IsNullOrEmpty(InputValue)) return null; - parameters.Add($"\"{InputValue}\""); + parameters.Append($"\"{InputValue}\" "); break; // Input value only (device path) @@ -1195,9 +1196,9 @@ namespace MPF.ExecutionContexts.Aaru return null; if (InputValue!.Contains(" ")) - parameters.Add($"\"{InputValue!.TrimEnd('\\')}\""); + parameters.Append($"\"{InputValue!.TrimEnd('\\')}\" "); else - parameters.Add(InputValue!.TrimEnd('\\')); + parameters.Append(InputValue!.TrimEnd('\\')); break; @@ -1206,8 +1207,8 @@ namespace MPF.ExecutionContexts.Aaru if (string.IsNullOrEmpty(Input1Value) || string.IsNullOrEmpty(Input2Value)) return null; - parameters.Add($"\"{Input1Value}\""); - parameters.Add($"\"{Input2Value}\""); + parameters.Append($"\"{Input1Value}\" "); + parameters.Append($"\"{Input2Value}\" "); break; // Input and Output value (file path) @@ -1216,8 +1217,8 @@ namespace MPF.ExecutionContexts.Aaru if (string.IsNullOrEmpty(InputValue) || string.IsNullOrEmpty(OutputValue)) return null; - parameters.Add($"\"{InputValue}\""); - parameters.Add($"\"{OutputValue}\""); + parameters.Append($"\"{InputValue}\" "); + parameters.Append($"\"{OutputValue}\" "); break; // Input and Output value (device path) @@ -1225,8 +1226,8 @@ namespace MPF.ExecutionContexts.Aaru if (string.IsNullOrEmpty(InputValue) || string.IsNullOrEmpty(OutputValue)) return null; - parameters.Add(InputValue!.TrimEnd('\\')); - parameters.Add($"\"{OutputValue}\""); + parameters.Append(InputValue!.TrimEnd('\\')); + parameters.Append($"\"{OutputValue}\" "); break; // Remote host value only @@ -1235,11 +1236,11 @@ namespace MPF.ExecutionContexts.Aaru if (string.IsNullOrEmpty(RemoteHostValue)) return null; - parameters.Add($"\"{RemoteHostValue}\""); + parameters.Append($"\"{RemoteHostValue}\" "); break; } - return string.Join(" ", [.. parameters]); + return parameters.ToString().TrimEnd(); } /// diff --git a/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs b/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs index 1d393c0c..a31fbf7b 100644 --- a/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs +++ b/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs @@ -1,6 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; +using System.Text; using SabreTools.RedumpLib.Data; namespace MPF.ExecutionContexts.DiscImageCreator @@ -393,12 +393,12 @@ namespace MPF.ExecutionContexts.DiscImageCreator /// public override string? GenerateParameters() { - var parameters = new List(); + var parameters = new StringBuilder(); BaseCommand ??= CommandStrings.NONE; if (!string.IsNullOrEmpty(BaseCommand)) - parameters.Add(BaseCommand); + parameters.Append($"{BaseCommand} "); else return null; @@ -427,9 +427,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (DrivePath != null) { if (DrivePath.Contains(" ")) - parameters.Add($"\"{DrivePath}\""); + parameters.Append($"\"{DrivePath}\" "); else - parameters.Add(DrivePath); + parameters.Append($"{DrivePath} "); } else { @@ -458,7 +458,7 @@ namespace MPF.ExecutionContexts.DiscImageCreator || BaseCommand == CommandStrings.XGD3Swap) { if (Filename != null) - parameters.Add("\"" + Filename.Trim('"') + "\""); + parameters.Append($"\"{Filename.Trim('"')}\" "); else return null; } @@ -467,7 +467,7 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (BaseCommand == CommandStrings.Merge) { if (OptiarcFilename != null) - parameters.Add("\"" + OptiarcFilename.Trim('"') + "\""); + parameters.Append($"\"{OptiarcFilename.Trim('"')}\" "); else return null; } @@ -487,7 +487,7 @@ namespace MPF.ExecutionContexts.DiscImageCreator || BaseCommand == CommandStrings.XGD3Swap) { if (DriveSpeed != null) - parameters.Add(DriveSpeed.ToString() ?? string.Empty); + parameters.Append($"{DriveSpeed} "); else return null; } @@ -498,8 +498,8 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (StartLBAValue != null && EndLBAValue != null) { - parameters.Add(StartLBAValue.ToString() ?? string.Empty); - parameters.Add(EndLBAValue.ToString() ?? string.Empty); + parameters.Append($"{StartLBAValue} "); + parameters.Append($"{EndLBAValue} "); } else return null; @@ -510,9 +510,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.AddOffset] == true) { - parameters.Add(FlagStrings.AddOffset); + parameters.Append($"{FlagStrings.AddOffset} "); if (AddOffsetValue != null) - parameters.Add(AddOffsetValue.ToString() ?? string.Empty); + parameters.Append($"{AddOffsetValue} "); } } @@ -520,14 +520,14 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.AMSF)) { if (this[FlagStrings.AMSF] == true) - parameters.Add(FlagStrings.AMSF); + parameters.Append($"{FlagStrings.AMSF} "); } // Atari Jaguar CD if (IsFlagSupported(FlagStrings.AtariJaguar)) { if (this[FlagStrings.AtariJaguar] == true) - parameters.Add(FlagStrings.AtariJaguar); + parameters.Append($"{FlagStrings.AtariJaguar} "); } // BE Opcode @@ -535,10 +535,10 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.BEOpcode] == true && this[FlagStrings.D8Opcode] != true) { - parameters.Add(FlagStrings.BEOpcode); + parameters.Append($"{FlagStrings.BEOpcode} "); if (BEOpcodeValue != null && (BEOpcodeValue == "raw" || BEOpcodeValue == "pack")) - parameters.Add(BEOpcodeValue); + parameters.Append($"{BEOpcodeValue} "); } } @@ -547,37 +547,37 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.C2Opcode] == true) { - parameters.Add(FlagStrings.C2Opcode); + parameters.Append($"{FlagStrings.C2Opcode} "); if (C2OpcodeValue[0] != null) { if (C2OpcodeValue[0] > 0) - parameters.Add(C2OpcodeValue[0].ToString() ?? string.Empty); + parameters.Append($"{C2OpcodeValue[0]} "); else return null; } if (C2OpcodeValue[1] != null) { - parameters.Add(C2OpcodeValue[1].ToString() ?? string.Empty); + parameters.Append($"{C2OpcodeValue[1]} "); } if (C2OpcodeValue[2] != null) { - parameters.Add(C2OpcodeValue[2].ToString() ?? string.Empty); + parameters.Append($"{C2OpcodeValue[2]} "); } if (C2OpcodeValue[3] != null) { if (C2OpcodeValue[3] == 0) { - parameters.Add(C2OpcodeValue[3].ToString() ?? string.Empty); + parameters.Append($"{C2OpcodeValue[3]} "); } else if (C2OpcodeValue[3] == 1) { - parameters.Add(C2OpcodeValue[3].ToString() ?? string.Empty); + parameters.Append($"{C2OpcodeValue[3]} "); if (C2OpcodeValue[4] != null && C2OpcodeValue[5] != null) { if (C2OpcodeValue[4] > 0 && C2OpcodeValue[5] > 0) { - parameters.Add(C2OpcodeValue[4].ToString() ?? string.Empty); - parameters.Add(C2OpcodeValue[5].ToString() ?? string.Empty); + parameters.Append($"{C2OpcodeValue[4]} "); + parameters.Append($"{C2OpcodeValue[5]} "); } else { @@ -597,28 +597,28 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.CopyrightManagementInformation)) { if (this[FlagStrings.CopyrightManagementInformation] == true) - parameters.Add(FlagStrings.CopyrightManagementInformation); + parameters.Append($"{FlagStrings.CopyrightManagementInformation} "); } // D8 Opcode if (IsFlagSupported(FlagStrings.D8Opcode)) { if (this[FlagStrings.D8Opcode] == true) - parameters.Add(FlagStrings.D8Opcode); + parameters.Append($"{FlagStrings.D8Opcode} "); } // DAT Expand if (IsFlagSupported(FlagStrings.DatExpand)) { if (this[FlagStrings.DatExpand] == true) - parameters.Add(FlagStrings.DatExpand); + parameters.Append($"{FlagStrings.DatExpand} "); } // Disable Beep if (IsFlagSupported(FlagStrings.DisableBeep)) { if (this[FlagStrings.DisableBeep] == true) - parameters.Add(FlagStrings.DisableBeep); + parameters.Append($"{FlagStrings.DisableBeep} "); } // DVD/HD-DVD/BD Reread @@ -626,9 +626,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.DVDReread] == true) { - parameters.Add(FlagStrings.DVDReread); + parameters.Append($"{FlagStrings.DVDReread} "); if (DVDRereadValue != null) - parameters.Add(DVDRereadValue.ToString() ?? string.Empty); + parameters.Append($"{DVDRereadValue} "); } } @@ -636,7 +636,7 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.ExtractMicroSoftCabFile)) { if (this[FlagStrings.ExtractMicroSoftCabFile] == true) - parameters.Add(FlagStrings.ExtractMicroSoftCabFile); + parameters.Append($"{FlagStrings.ExtractMicroSoftCabFile} "); } // Fix @@ -644,9 +644,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.Fix] == true) { - parameters.Add(FlagStrings.Fix); + parameters.Append($"{FlagStrings.Fix} "); if (FixValue != null) - parameters.Add(FixValue.ToString() ?? string.Empty); + parameters.Append($"{FixValue} "); else return null; } @@ -657,9 +657,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.ForceUnitAccess] == true) { - parameters.Add(FlagStrings.ForceUnitAccess); + parameters.Append($"{FlagStrings.ForceUnitAccess} "); if (ForceUnitAccessValue != null) - parameters.Add(ForceUnitAccessValue.ToString() ?? string.Empty); + parameters.Append($"{ForceUnitAccessValue} "); } } @@ -668,9 +668,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.MultiSectorRead] == true) { - parameters.Add(FlagStrings.MultiSectorRead); + parameters.Append($"{FlagStrings.MultiSectorRead} "); if (MultiSectorReadValue != null) - parameters.Add(MultiSectorReadValue.ToString() ?? string.Empty); + parameters.Append($"{MultiSectorReadValue} "); } } @@ -678,35 +678,35 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.NoFixSubP)) { if (this[FlagStrings.NoFixSubP] == true) - parameters.Add(FlagStrings.NoFixSubP); + parameters.Append($"{FlagStrings.NoFixSubP} "); } // Not fix SubQ if (IsFlagSupported(FlagStrings.NoFixSubQ)) { if (this[FlagStrings.NoFixSubQ] == true) - parameters.Add(FlagStrings.NoFixSubQ); + parameters.Append($"{FlagStrings.NoFixSubQ} "); } // Not fix SubQ (PlayStation LibCrypt) if (IsFlagSupported(FlagStrings.NoFixSubQLibCrypt)) { if (this[FlagStrings.NoFixSubQLibCrypt] == true) - parameters.Add(FlagStrings.NoFixSubQLibCrypt); + parameters.Append($"{FlagStrings.NoFixSubQLibCrypt} "); } // Not fix SubQ (SecuROM) if (IsFlagSupported(FlagStrings.NoFixSubQSecuROM)) { if (this[FlagStrings.NoFixSubQSecuROM] == true) - parameters.Add(FlagStrings.NoFixSubQSecuROM); + parameters.Append($"{FlagStrings.NoFixSubQSecuROM} "); } // Not fix SubRtoW if (IsFlagSupported(FlagStrings.NoFixSubRtoW)) { if (this[FlagStrings.NoFixSubRtoW] == true) - parameters.Add(FlagStrings.NoFixSubRtoW); + parameters.Append($"{FlagStrings.NoFixSubRtoW} "); } // Not skip security sectors @@ -714,9 +714,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.NoSkipSS] == true) { - parameters.Add(FlagStrings.NoSkipSS); + parameters.Append($"{FlagStrings.NoSkipSS} "); if (NoSkipSecuritySectorValue != null) - parameters.Add(NoSkipSecuritySectorValue.ToString() ?? string.Empty); + parameters.Append($"{NoSkipSecuritySectorValue} "); } } @@ -725,9 +725,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.PadSector] == true) { - parameters.Add(FlagStrings.PadSector); + parameters.Append($"{FlagStrings.PadSector} "); if (PadSectorValue != null) - parameters.Add(PadSectorValue.ToString() ?? string.Empty); + parameters.Append($"{PadSectorValue} "); } } @@ -739,9 +739,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (RangeStartLBAValue == null || RangeEndLBAValue == null) return null; - parameters.Add(FlagStrings.Range); - parameters.Add(RangeStartLBAValue.ToString() ?? string.Empty); - parameters.Add(RangeEndLBAValue.ToString() ?? string.Empty); + parameters.Append($"{FlagStrings.Range} "); + parameters.Append($"{RangeStartLBAValue} "); + parameters.Append($"{RangeEndLBAValue} "); } } @@ -749,14 +749,14 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.Raw)) { if (this[FlagStrings.Raw] == true) - parameters.Add(FlagStrings.Raw); + parameters.Append($"{FlagStrings.Raw} "); } // Resume if (IsFlagSupported(FlagStrings.Resume)) { if (this[FlagStrings.Resume] == true) - parameters.Add(FlagStrings.Resume); + parameters.Append($"{FlagStrings.Resume} "); } // Reverse read @@ -764,15 +764,15 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.Reverse] == true) { - parameters.Add(FlagStrings.Reverse); + parameters.Append($"{FlagStrings.Reverse} "); if (BaseCommand == CommandStrings.DigitalVideoDisc) { if (ReverseStartLBAValue == null || ReverseEndLBAValue == null) return null; - parameters.Add(ReverseStartLBAValue.ToString() ?? string.Empty); - parameters.Add(ReverseEndLBAValue.ToString() ?? string.Empty); + parameters.Append($"{ReverseStartLBAValue} "); + parameters.Append($"{ReverseEndLBAValue} "); } } } @@ -781,7 +781,7 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.ScanAntiMod)) { if (this[FlagStrings.ScanAntiMod] == true) - parameters.Add(FlagStrings.ScanAntiMod); + parameters.Append($"{FlagStrings.ScanAntiMod} "); } // Scan file to detect protect @@ -789,11 +789,11 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.ScanFileProtect] == true) { - parameters.Add(FlagStrings.ScanFileProtect); + parameters.Append($"{FlagStrings.ScanFileProtect} "); if (ScanFileProtectValue != null) { if (ScanFileProtectValue > 0) - parameters.Add(ScanFileProtectValue.ToString() ?? string.Empty); + parameters.Append($"{ScanFileProtectValue} "); else return null; } @@ -804,14 +804,14 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.ScanSectorProtect)) { if (this[FlagStrings.ScanSectorProtect] == true) - parameters.Add(FlagStrings.ScanSectorProtect); + parameters.Append($"{FlagStrings.ScanSectorProtect} "); } // Scan 74:00:00 (Saturn) if (IsFlagSupported(FlagStrings.SeventyFour)) { if (this[FlagStrings.SeventyFour] == true) - parameters.Add(FlagStrings.SeventyFour); + parameters.Append($"{FlagStrings.SeventyFour} "); } // Skip sectors @@ -819,18 +819,18 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.SkipSector] == true) { - parameters.Add(FlagStrings.SkipSector); + parameters.Append($"{FlagStrings.SkipSector} "); if (SkipSectorValue[0] != null) { if (SkipSectorValue[0] > 0) - parameters.Add(SkipSectorValue[0].ToString() ?? string.Empty); + parameters.Append($"{SkipSectorValue[0]} "); else return null; } if (SkipSectorValue[1] != null) { if (SkipSectorValue[1] == 0) - parameters.Add(SkipSectorValue[1].ToString() ?? string.Empty); + parameters.Append($"{SkipSectorValue[1]} "); } } } @@ -840,11 +840,11 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.SubchannelReadLevel] == true) { - parameters.Add(FlagStrings.SubchannelReadLevel); + parameters.Append($"{FlagStrings.SubchannelReadLevel} "); if (SubchannelReadLevelValue != null) { if (SubchannelReadLevelValue >= 0 && SubchannelReadLevelValue <= 2) - parameters.Add(SubchannelReadLevelValue.ToString() ?? string.Empty); + parameters.Append($"{SubchannelReadLevelValue} "); else return null; } @@ -855,21 +855,21 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.Tages)) { if (this[FlagStrings.Tages] == true) - parameters.Add(FlagStrings.Tages); + parameters.Append($"{FlagStrings.Tages} "); } // Try Reading Pregap if (IsFlagSupported(FlagStrings.TryReadingPregap)) { if (this[FlagStrings.TryReadingPregap] == true) - parameters.Add(FlagStrings.TryReadingPregap); + parameters.Append($"{FlagStrings.TryReadingPregap} "); } // Use Anchor Volume Descriptor Pointer if (IsFlagSupported(FlagStrings.UseAnchorVolumeDescriptorPointer)) { if (this[FlagStrings.UseAnchorVolumeDescriptorPointer] == true) - parameters.Add(FlagStrings.UseAnchorVolumeDescriptorPointer); + parameters.Append($"{FlagStrings.UseAnchorVolumeDescriptorPointer} "); } // VideoNow @@ -877,11 +877,11 @@ namespace MPF.ExecutionContexts.DiscImageCreator { if (this[FlagStrings.VideoNow] == true) { - parameters.Add(FlagStrings.VideoNow); + parameters.Append($"{FlagStrings.VideoNow} "); if (VideoNowValue != null) { if (VideoNowValue >= 0) - parameters.Add(VideoNowValue.ToString() ?? string.Empty); + parameters.Append($"{VideoNowValue} "); else return null; } @@ -892,17 +892,17 @@ namespace MPF.ExecutionContexts.DiscImageCreator if (IsFlagSupported(FlagStrings.VideoNowColor)) { if (this[FlagStrings.VideoNowColor] == true) - parameters.Add(FlagStrings.VideoNowColor); + parameters.Append($"{FlagStrings.VideoNowColor} "); } // VideoNowXP if (IsFlagSupported(FlagStrings.VideoNowXP)) { if (this[FlagStrings.VideoNowXP] == true) - parameters.Add(FlagStrings.VideoNowXP); + parameters.Append($"{FlagStrings.VideoNowXP} "); } - return string.Join(" ", [.. parameters]); + return parameters.ToString().TrimEnd(); } /// diff --git a/MPF.ExecutionContexts/Redumper/ExecutionContext.cs b/MPF.ExecutionContexts/Redumper/ExecutionContext.cs index 24773d93..98ed1ca8 100644 --- a/MPF.ExecutionContexts/Redumper/ExecutionContext.cs +++ b/MPF.ExecutionContexts/Redumper/ExecutionContext.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Text; using SabreTools.RedumpLib.Data; namespace MPF.ExecutionContexts.Redumper @@ -242,34 +243,36 @@ namespace MPF.ExecutionContexts.Redumper /// public override string GenerateParameters() { - var parameters = new List(); + var parameters = new StringBuilder(); ModeValues ??= [CommandStrings.NONE]; // Modes - parameters.AddRange(ModeValues); + string modes = string.Join(" ", [.. ModeValues]); + if (modes.Length > 0) + parameters.Append($"{modes} "); #region General // Help if (this[FlagStrings.HelpLong] == true) - parameters.Add(FlagStrings.HelpLong); + parameters.Append($"{FlagStrings.HelpLong} "); // Version if (this[FlagStrings.Version] == true) - parameters.Add(FlagStrings.Version); + parameters.Append($"{FlagStrings.Version} "); // Verbose if (this[FlagStrings.Verbose] == true) - parameters.Add(FlagStrings.Verbose); + parameters.Append($"{FlagStrings.Verbose} "); // Auto Eject if (this[FlagStrings.AutoEject] == true) - parameters.Add(FlagStrings.AutoEject); + parameters.Append($"{FlagStrings.AutoEject} "); // Debug if (this[FlagStrings.Debug] == true) - parameters.Add(FlagStrings.Debug); + parameters.Append($"{FlagStrings.Debug} "); // Drive if (this[FlagStrings.Drive] == true) @@ -277,9 +280,9 @@ namespace MPF.ExecutionContexts.Redumper if (DriveValue != null) { if (DriveValue.Contains(" ")) - parameters.Add($"{FlagStrings.Drive}=\"{DriveValue}\""); + parameters.Append($"{FlagStrings.Drive}=\"{DriveValue}\" "); else - parameters.Add($"{FlagStrings.Drive}={DriveValue}"); + parameters.Append($"{FlagStrings.Drive}={DriveValue} "); } } @@ -287,33 +290,33 @@ namespace MPF.ExecutionContexts.Redumper if (this[FlagStrings.Speed] == true) { if (SpeedValue != null) - parameters.Add($"{FlagStrings.Speed}={SpeedValue}"); + parameters.Append($"{FlagStrings.Speed}={SpeedValue} "); } // Retries if (this[FlagStrings.Retries] == true) { if (RetriesValue != null) - parameters.Add($"{FlagStrings.Retries}={RetriesValue}"); + parameters.Append($"{FlagStrings.Retries}={RetriesValue} "); } // Image Path if (this[FlagStrings.ImagePath] == true) { if (ImagePathValue != null) - parameters.Add($"{FlagStrings.ImagePath}={ImagePathValue}"); + parameters.Append($"{FlagStrings.ImagePath}={ImagePathValue} "); } // Image Name if (this[FlagStrings.ImageName] == true) { if (ImageNameValue != null) - parameters.Add($"{FlagStrings.ImageName}={ImageNameValue}"); + parameters.Append($"{FlagStrings.ImageName}={ImageNameValue} "); } // Overwrite if (this[FlagStrings.Overwrite] == true) - parameters.Add(FlagStrings.Overwrite); + parameters.Append($"{FlagStrings.Overwrite} "); #endregion @@ -323,42 +326,42 @@ namespace MPF.ExecutionContexts.Redumper if (this[FlagStrings.DriveType] == true) { if (DriveTypeValue != null) - parameters.Add($"{FlagStrings.DriveType}={DriveTypeValue}"); + parameters.Append($"{FlagStrings.DriveType}={DriveTypeValue} "); } // Drive Read Offset if (this[FlagStrings.DriveReadOffset] == true) { if (DriveReadOffsetValue != null) - parameters.Add($"{FlagStrings.DriveReadOffset}={DriveReadOffsetValue}"); + parameters.Append($"{FlagStrings.DriveReadOffset}={DriveReadOffsetValue} "); } // Drive C2 Shift if (this[FlagStrings.DriveC2Shift] == true) { if (DriveC2ShiftValue != null) - parameters.Add($"{FlagStrings.DriveC2Shift}={DriveC2ShiftValue}"); + parameters.Append($"{FlagStrings.DriveC2Shift}={DriveC2ShiftValue} "); } // Drive Pregap Start if (this[FlagStrings.DrivePregapStart] == true) { if (DrivePregapStartValue != null) - parameters.Add($"{FlagStrings.DrivePregapStart}={DrivePregapStartValue}"); + parameters.Append($"{FlagStrings.DrivePregapStart}={DrivePregapStartValue} "); } // Drive Read Method if (this[FlagStrings.DriveReadMethod] == true) { if (DriveReadMethodValue != null) - parameters.Add($"{FlagStrings.DriveReadMethod}={DriveReadMethodValue}"); + parameters.Append($"{FlagStrings.DriveReadMethod}={DriveReadMethodValue} "); } // Drive Sector Order if (this[FlagStrings.DriveSectorOrder] == true) { if (DriveSectorOrderValue != null) - parameters.Add($"{FlagStrings.DriveSectorOrder}={DriveSectorOrderValue}"); + parameters.Append($"{FlagStrings.DriveSectorOrder}={DriveSectorOrderValue} "); } #endregion @@ -367,18 +370,18 @@ namespace MPF.ExecutionContexts.Redumper // Plextor Leadin Skip if (this[FlagStrings.PlextorSkipLeadin] == true) - parameters.Add(FlagStrings.PlextorSkipLeadin); + parameters.Append($"{FlagStrings.PlextorSkipLeadin} "); // Plextor Leadin Retries if (this[FlagStrings.PlextorLeadinRetries] == true) { if (PlextorLeadinRetriesValue != null) - parameters.Add($"{FlagStrings.PlextorLeadinRetries}={PlextorLeadinRetriesValue}"); + parameters.Append($"{FlagStrings.PlextorLeadinRetries}={PlextorLeadinRetriesValue} "); } // Asus Skip Leadout if (this[FlagStrings.AsusSkipLeadout] == true) - parameters.Add(FlagStrings.AsusSkipLeadout); + parameters.Append($"{FlagStrings.AsusSkipLeadout} "); #endregion @@ -388,23 +391,23 @@ namespace MPF.ExecutionContexts.Redumper if (this[FlagStrings.ForceOffset] == true) { if (ForceOffsetValue != null) - parameters.Add($"{FlagStrings.ForceOffset}={ForceOffsetValue}"); + parameters.Append($"{FlagStrings.ForceOffset}={ForceOffsetValue} "); } // Audio Silence Threshold if (this[FlagStrings.AudioSilenceThreshold] == true) { if (AudioSilenceThresholdValue != null) - parameters.Add($"{FlagStrings.AudioSilenceThreshold}={AudioSilenceThresholdValue}"); + parameters.Append($"{FlagStrings.AudioSilenceThreshold}={AudioSilenceThresholdValue} "); } // Correct Offset Shift if (this[FlagStrings.CorrectOffsetShift] == true) - parameters.Add(FlagStrings.CorrectOffsetShift); + parameters.Append($"{FlagStrings.CorrectOffsetShift} "); // Offset Shift Relocate if (this[FlagStrings.OffsetShiftRelocate] == true) - parameters.Add(FlagStrings.OffsetShiftRelocate); + parameters.Append($"{FlagStrings.OffsetShiftRelocate} "); #endregion @@ -412,26 +415,26 @@ namespace MPF.ExecutionContexts.Redumper // Force Split if (this[FlagStrings.ForceSplit] == true) - parameters.Add(FlagStrings.ForceSplit); + parameters.Append($"{FlagStrings.ForceSplit} "); // Leave Unchanged if (this[FlagStrings.LeaveUnchanged] == true) - parameters.Add(FlagStrings.LeaveUnchanged); + parameters.Append($"{FlagStrings.LeaveUnchanged} "); // Force QTOC if (this[FlagStrings.ForceQTOC] == true) - parameters.Add(FlagStrings.ForceQTOC); + parameters.Append($"{FlagStrings.ForceQTOC} "); // Skip Fill if (this[FlagStrings.SkipFill] == true) { if (SkipFillValue != null) - parameters.Add($"{FlagStrings.SkipFill}={SkipFillValue:x}"); + parameters.Append($"{FlagStrings.SkipFill}={SkipFillValue:x} "); } // ISO9660 Trim if (this[FlagStrings.ISO9660Trim] == true) - parameters.Add(FlagStrings.ISO9660Trim); + parameters.Append($"{FlagStrings.ISO9660Trim} "); #endregion @@ -441,60 +444,60 @@ namespace MPF.ExecutionContexts.Redumper if (this[FlagStrings.LBAStart] == true) { if (LBAStartValue != null) - parameters.Add($"{FlagStrings.LBAStart}={LBAStartValue}"); + parameters.Append($"{FlagStrings.LBAStart}={LBAStartValue} "); } // LBA End if (this[FlagStrings.LBAEnd] == true) { if (LBAEndValue != null) - parameters.Add($"{FlagStrings.LBAEnd}={LBAEndValue}"); + parameters.Append($"{FlagStrings.LBAEnd}={LBAEndValue} "); } // Refine Subchannel if (this[FlagStrings.RefineSubchannel] == true) - parameters.Add(FlagStrings.RefineSubchannel); + parameters.Append($"{FlagStrings.RefineSubchannel} "); // Skip if (this[FlagStrings.Skip] == true) { if (!string.IsNullOrEmpty(SkipValue)) - parameters.Add($"{FlagStrings.Skip}={SkipValue}"); + parameters.Append($"{FlagStrings.Skip}={SkipValue} "); } // Dump Write Offset if (this[FlagStrings.DumpWriteOffset] == true) { if (DumpWriteOffsetValue != null) - parameters.Add($"{FlagStrings.DumpWriteOffset}={DumpWriteOffsetValue}"); + parameters.Append($"{FlagStrings.DumpWriteOffset}={DumpWriteOffsetValue} "); } // Dump Read Size if (this[FlagStrings.DumpReadSize] == true) { if (DumpReadSizeValue != null && DumpReadSizeValue > 0) - parameters.Add($"{FlagStrings.DumpReadSize}={DumpReadSizeValue}"); + parameters.Append($"{FlagStrings.DumpReadSize}={DumpReadSizeValue} "); } // Overread Leadout if (this[FlagStrings.OverreadLeadout] == true) - parameters.Add(FlagStrings.OverreadLeadout); + parameters.Append($"{FlagStrings.OverreadLeadout} "); // Force Unscrambled if (this[FlagStrings.ForceUnscrambled] == true) - parameters.Add(FlagStrings.ForceUnscrambled); + parameters.Append($"{FlagStrings.ForceUnscrambled} "); // Legacy Subs if (this[FlagStrings.LegacySubs] == true) - parameters.Add(FlagStrings.LegacySubs); + parameters.Append($"{FlagStrings.LegacySubs} "); // Disable CD Text if (this[FlagStrings.DisableCDText] == true) - parameters.Add(FlagStrings.DisableCDText); + parameters.Append($"{FlagStrings.DisableCDText} "); #endregion - return string.Join(" ", [.. parameters]); + return parameters.ToString().TrimEnd(); } ///