diff --git a/DiscImageChef.Core/Devices/Dumping/ATA.cs b/DiscImageChef.Core/Devices/Dumping/ATA.cs index a129a28cc..e9e04d32c 100644 --- a/DiscImageChef.Core/Devices/Dumping/ATA.cs +++ b/DiscImageChef.Core/Devices/Dumping/ATA.cs @@ -57,8 +57,6 @@ namespace DiscImageChef.Core.Devices.Dumping /// public void Ata() { - bool aborted; - if(dumpRaw) { if(force) ErrorMessage?.Invoke("Raw dumping not yet supported in ATA devices, continuing..."); @@ -92,9 +90,6 @@ namespace DiscImageChef.Core.Devices.Dumping double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - aborted = false; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; - // Initializate reader UpdateStatus?.Invoke("Initializing reader."); dumpLog.WriteLine("Initializing reader."); diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index bf757200b..417833255 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -69,22 +69,20 @@ namespace DiscImageChef.Core.Devices.Dumping /// Disc type as detected in MMC layer internal void CompactDisc(ref MediaType dskType) { - uint subSize; - DateTime start; - DateTime end; - bool readcd; - bool read6 = false, read10 = false, read12 = false, read16 = false; - bool sense = false; - const uint SECTOR_SIZE = 2352; - FullTOC.CDFullTOC? toc = null; - double totalDuration = 0; - double currentSpeed = 0; - double maxSpeed = double.MinValue; - double minSpeed = double.MaxValue; - uint blocksToRead = 64; - bool aborted = false; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; - Dictionary mediaTags = new Dictionary(); + uint subSize; + DateTime start; + DateTime end; + bool readcd; + bool read6 = false, read10 = false, read12 = false, read16 = false; + bool sense = false; + const uint SECTOR_SIZE = 2352; + FullTOC.CDFullTOC? toc = null; + double totalDuration = 0; + double currentSpeed = 0; + double maxSpeed = double.MinValue; + double minSpeed = double.MaxValue; + uint blocksToRead = 64; + Dictionary mediaTags = new Dictionary(); if(dumpRaw) { diff --git a/DiscImageChef.Core/Devices/Dumping/Dump.cs b/DiscImageChef.Core/Devices/Dumping/Dump.cs index 166f98d30..64109a6d5 100644 --- a/DiscImageChef.Core/Devices/Dumping/Dump.cs +++ b/DiscImageChef.Core/Devices/Dumping/Dump.cs @@ -31,6 +31,7 @@ namespace DiscImageChef.Core.Devices.Dumping readonly CICMMetadataType preSidecar; readonly ushort retryPasses; readonly bool stopOnError; + bool aborted; bool dumpFirstTrackPregap; Resume resume; uint skip; @@ -87,6 +88,7 @@ namespace DiscImageChef.Core.Devices.Dumping this.nometadata = nometadata; this.notrim = notrim; this.dumpFirstTrackPregap = dumpFirstTrackPregap; + aborted = false; } /// @@ -136,6 +138,11 @@ namespace DiscImageChef.Core.Devices.Dumping fs.Close(); } + public void Abort() + { + aborted = true; + } + /// /// Event raised when the progress bar is not longer needed /// diff --git a/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs b/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs index 107417c0a..d0dde7b78 100644 --- a/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs +++ b/DiscImageChef.Core/Devices/Dumping/PlayStationPortable.cs @@ -180,10 +180,8 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - bool aborted = false; DateTime start; DateTime end; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; bool sense = dev.Read12(out byte[] readBuffer, out _, 0, false, true, false, false, 0, 512, 0, 1, false, dev.Timeout, out _); @@ -667,13 +665,11 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - bool aborted = false; uint blocksToRead = 64; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; - DateTime start; - DateTime end; - MediaType dskType; - bool sense; + DateTime start; + DateTime end; + MediaType dskType; + bool sense; sense = dev.ReadCapacity(out byte[] readBuffer, out _, dev.Timeout, out _); diff --git a/DiscImageChef.Core/Devices/Dumping/SBC.cs b/DiscImageChef.Core/Devices/Dumping/SBC.cs index bdb853fee..3ac15b52f 100644 --- a/DiscImageChef.Core/Devices/Dumping/SBC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SBC.cs @@ -64,20 +64,18 @@ namespace DiscImageChef.Core.Devices.Dumping /// Disc type as detected in SCSI or MMC layer internal void Sbc(Dictionary mediaTags, ref MediaType dskType, bool opticalDisc) { - bool sense; - byte scsiMediumType = 0; - byte scsiDensityCode = 0; - bool containsFloppyPage = false; - const ushort SBC_PROFILE = 0x0001; - DateTime start; - DateTime end; - double totalDuration = 0; - double currentSpeed = 0; - double maxSpeed = double.MinValue; - double minSpeed = double.MaxValue; - byte[] readBuffer; - bool aborted = false; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; + bool sense; + byte scsiMediumType = 0; + byte scsiDensityCode = 0; + bool containsFloppyPage = false; + const ushort SBC_PROFILE = 0x0001; + DateTime start; + DateTime end; + double totalDuration = 0; + double currentSpeed = 0; + double maxSpeed = double.MinValue; + double minSpeed = double.MaxValue; + byte[] readBuffer; Modes.DecodedMode? decMode = null; dumpLog.WriteLine("Initializing reader."); diff --git a/DiscImageChef.Core/Devices/Dumping/SSC.cs b/DiscImageChef.Core/Devices/Dumping/SSC.cs index 7fb094e44..aa6246a3d 100644 --- a/DiscImageChef.Core/Devices/Dumping/SSC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SSC.cs @@ -55,7 +55,6 @@ namespace DiscImageChef.Core.Devices.Dumping internal void Ssc() { FixedSense? fxSense; - bool aborted; bool sense; ulong blocks = 0; uint blockSize; @@ -403,8 +402,6 @@ namespace DiscImageChef.Core.Devices.Dumping }; Checksum partitionChk = new Checksum(); - aborted = false; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; DateTime timeSpeedStart = DateTime.UtcNow; ulong currentSpeedSize = 0; diff --git a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs index 282ec0535..34362f41c 100644 --- a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs @@ -57,8 +57,6 @@ namespace DiscImageChef.Core.Devices.Dumping /// public void SecureDigital() { - bool aborted; - if(dumpRaw) { if(force) @@ -182,9 +180,6 @@ namespace DiscImageChef.Core.Devices.Dumping double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - aborted = false; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; - if(blocks == 0) { dumpLog.WriteLine("Unable to get device size."); diff --git a/DiscImageChef.Core/Devices/Dumping/XGD.cs b/DiscImageChef.Core/Devices/Dumping/XGD.cs index ddfe87c8d..7bf961906 100644 --- a/DiscImageChef.Core/Devices/Dumping/XGD.cs +++ b/DiscImageChef.Core/Devices/Dumping/XGD.cs @@ -74,8 +74,6 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - bool aborted = false; - System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; if(mediaTags.ContainsKey(MediaTagType.DVD_PFI)) mediaTags.Remove(MediaTagType.DVD_PFI); if(mediaTags.ContainsKey(MediaTagType.DVD_DMI)) mediaTags.Remove(MediaTagType.DVD_DMI); diff --git a/DiscImageChef.Gui/Forms/frmDump.xeto.cs b/DiscImageChef.Gui/Forms/frmDump.xeto.cs index 87565932c..b013430e2 100644 --- a/DiscImageChef.Gui/Forms/frmDump.xeto.cs +++ b/DiscImageChef.Gui/Forms/frmDump.xeto.cs @@ -57,7 +57,9 @@ namespace DiscImageChef.Gui.Forms { public class frmDump : Form { - readonly string devicePath; + readonly string devicePath; + + Dump dumper; string outputPrefix; Resume resume; CICMMetadataType sidecar; @@ -378,6 +380,11 @@ namespace DiscImageChef.Gui.Forms Close(); } + void OnBtnAbortClick(object sender, EventArgs e) + { + dumper.Abort(); + } + void OnBtnDumpClick(object sender, EventArgs e) { Device dev; @@ -446,13 +453,12 @@ namespace DiscImageChef.Gui.Forms parsedOptions.Add(key, value); } - Dump dumper = new Dump(chkResume.Checked == true, dev, devicePath, outputFormat, - (ushort)stpRetries.Value, - chkForce.Checked == true, false, chkPersistent.Checked == true, - chkStopOnError.Checked == true, resume, dumpLog, encoding, outputPrefix, - txtDestination.Text, parsedOptions, sidecar, (uint)stpSkipped.Value, - chkExistingMetadata.Checked == false, chkTrim.Checked == false, - chkTrack1Pregap.Checked == true); + dumper = new Dump(chkResume.Checked == true, dev, devicePath, outputFormat, (ushort)stpRetries.Value, + chkForce.Checked == true, false, chkPersistent.Checked == true, + chkStopOnError.Checked == true, resume, dumpLog, encoding, outputPrefix, + txtDestination.Text, parsedOptions, sidecar, (uint)stpSkipped.Value, + chkExistingMetadata.Checked == false, chkTrim.Checked == false, + chkTrack1Pregap.Checked == true); /*dumper.UpdateStatus += Progress.UpdateStatus; dumper.ErrorMessage += Progress.ErrorMessage; diff --git a/DiscImageChef/Commands/DumpMedia.cs b/DiscImageChef/Commands/DumpMedia.cs index 975c3fbe6..c2d6127eb 100644 --- a/DiscImageChef/Commands/DumpMedia.cs +++ b/DiscImageChef/Commands/DumpMedia.cs @@ -304,6 +304,11 @@ namespace DiscImageChef.Commands dumper.PulseProgress += Progress.PulseProgress; dumper.InitProgress += Progress.InitProgress; dumper.EndProgress += Progress.EndProgress; + System.Console.CancelKeyPress += (sender, e) => + { + e.Cancel = true; + dumper.Abort(); + }; dumper.Start();