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