diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs index 92c2f6d61..273657477 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs @@ -260,6 +260,8 @@ partial class Dump break; } + if(_skipSafedisc && badSector is >= 800 and <= 10000) continue; + if(forward) { PulseProgress?.Invoke(runningPersistent @@ -542,9 +544,8 @@ partial class Dump // MEDIUM ERROR, retry with ignore error below if(decSense is { ASC: 0x11 }) - { - if(!sectorsNotEvenPartial.Contains(badSector)) sectorsNotEvenPartial.Add(badSector); - } + if(!sectorsNotEvenPartial.Contains(badSector)) + sectorsNotEvenPartial.Add(badSector); } // Because one block has been partially used to fix the offset diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs index 424f8076d..04a290173 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs @@ -122,6 +122,8 @@ partial class Dump break; } + if(_skipSafedisc && badSector is >= 800 and <= 10000) continue; + PulseProgress?.Invoke(string.Format(Localization.Core.Trimming_sector_0, badSector)); Track track = tracks.OrderBy(static t => t.StartSector).LastOrDefault(t => badSector >= t.StartSector); diff --git a/Aaru.Core/Devices/Dumping/Dump.cs b/Aaru.Core/Devices/Dumping/Dump.cs index ac15c0952..5fb1193bc 100644 --- a/Aaru.Core/Devices/Dumping/Dump.cs +++ b/Aaru.Core/Devices/Dumping/Dump.cs @@ -94,6 +94,7 @@ public partial class Dump readonly bool _hyperSpeed; readonly uint _ignoreCdrRunOuts; readonly Stopwatch _imageCloseStopwatch; + readonly bool _leadout; readonly bool _metadata; readonly string _outputPath; readonly IBaseWritableImage _outputPlugin; @@ -121,7 +122,6 @@ public partial class Dump bool _dumpFirstTrackPregap; bool _fixOffset; int _fixedSectors; - readonly bool _leadout; uint _maximumReadable; // Maximum number of sectors drive can read at once IMediaGraph _mediaGraph; bool _missingTitleKeysDirty; @@ -131,6 +131,7 @@ public partial class Dump Sidecar _sidecarClass; uint _skip; bool _skipCdireadyHole; + readonly bool _skipSafedisc; int _speed; int _speedMultiplier; bool _supportsPlextorD8; @@ -191,7 +192,7 @@ public partial class Dump bool generateSubchannels, uint maximumReadable, bool useBufferedReads, bool storeEncrypted, bool titleKeys, uint ignoreCdrRunOuts, bool createGraph, uint dimensions, bool paranoia, bool cureParanoia, bool bypassWiiDecryption, bool startReverse, int errorRecovery, bool hyperSpeed, - bool absurdSpeed, bool leadout) + bool absurdSpeed, bool leadout, bool skipSafedisc) { _doResume = doResume; _dev = dev; @@ -241,6 +242,7 @@ public partial class Dump _hyperSpeed = hyperSpeed; _absurdSpeed = absurdSpeed; _leadout = leadout; + _skipSafedisc = skipSafedisc; _dumpStopwatch = new Stopwatch(); _sidecarStopwatch = new Stopwatch(); _speedStopwatch = new Stopwatch(); diff --git a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs index cee8e8031..52fa53895 100644 --- a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs @@ -766,6 +766,7 @@ public sealed partial class MediaDumpViewModel : ViewModelBase 0, false, false, + false, false); new Thread(DoWork).Start(); diff --git a/Aaru/Commands/Media/Dump.cs b/Aaru/Commands/Media/Dump.cs index 5cb80a271..b1218c794 100644 --- a/Aaru/Commands/Media/Dump.cs +++ b/Aaru/Commands/Media/Dump.cs @@ -131,6 +131,7 @@ sealed class DumpMediaCommand : Command AaruLogging.Debug(MODULE_NAME, "--hyper-speed={0}", settings.HyperSpeed); AaruLogging.Debug(MODULE_NAME, "--absurd-speed={0}", settings.AbsurdSpeed); AaruLogging.Debug(MODULE_NAME, "--lead-out={0}", settings.LeadOut); + AaruLogging.Debug(MODULE_NAME, "--skip-safedisc={0}", settings.SkipSafeDisc); Dictionary parsedOptions = Options.Parse(settings.Options); AaruLogging.Debug(MODULE_NAME, UI.Parsed_options); @@ -556,7 +557,8 @@ sealed class DumpMediaCommand : Command settings.ErrorRecovery, settings.HyperSpeed, settings.AbsurdSpeed, - settings.LeadOut); + settings.LeadOut, + settings.SkipSafeDisc); AnsiConsole.Progress() .AutoClear(true) @@ -848,6 +850,10 @@ sealed class DumpMediaCommand : Command [DefaultValue(false)] [CommandOption("--lead-out")] public bool LeadOut { get; set; } + [Description("Skip retrying sectors from 800 to 10000, that are typically used by SafeDisc protection")] + [DefaultValue(false)] + [CommandOption("--skip-safedisc")] + public bool SkipSafeDisc { get; set; } } #endregion