diff --git a/DiscImageChef.Core/Devices/Dumping/SSC.cs b/DiscImageChef.Core/Devices/Dumping/SSC.cs index d0fae734b..f26d66b19 100644 --- a/DiscImageChef.Core/Devices/Dumping/SSC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SSC.cs @@ -591,31 +591,33 @@ namespace DiscImageChef.Core.Devices.Dumping canLocate = false; } } - - sense = canLocateLong - ? dev.Locate16(out senseBuf, false, 0, 0, dev.Timeout, out duration) - : dev.Locate(out senseBuf, false, 0, 0, dev.Timeout, out duration); - - do + else { - Thread.Sleep(1000); - PulseProgress?.Invoke("Rewinding, please wait..."); - dev.RequestSense(out senseBuf, dev.Timeout, out duration); - fxSense = Sense.DecodeFixed(senseBuf, out strSense); - } - while(fxSense.HasValue && fxSense.Value.ASC == 0x00 && - (fxSense.Value.ASCQ == 0x1A || fxSense.Value.ASCQ == 0x19)); + sense = canLocateLong + ? dev.Locate16(out senseBuf, false, 0, 0, dev.Timeout, out duration) + : dev.Locate(out senseBuf, false, 0, 0, dev.Timeout, out duration); - // And yet, did not rewind! - if(fxSense.HasValue && - (fxSense.Value.ASC == 0x00 && fxSense.Value.ASCQ != 0x04 || fxSense.Value.ASC != 0x00)) - { - StoppingErrorMessage?.Invoke("Drive could not rewind, please correct. Sense follows..." + - Environment.NewLine + strSense); - dumpLog.WriteLine("Drive could not rewind, please correct. Sense follows..."); - dumpLog.WriteLine("Device not ready. Sense {0}h ASC {1:X2}h ASCQ {2:X2}h", fxSense.Value.SenseKey, - fxSense.Value.ASC, fxSense.Value.ASCQ); - return; + do + { + Thread.Sleep(1000); + PulseProgress?.Invoke("Rewinding, please wait..."); + dev.RequestSense(out senseBuf, dev.Timeout, out duration); + fxSense = Sense.DecodeFixed(senseBuf, out strSense); + } + while(fxSense.HasValue && fxSense.Value.ASC == 0x00 && + (fxSense.Value.ASCQ == 0x1A || fxSense.Value.ASCQ == 0x19)); + + // And yet, did not rewind! + if(fxSense.HasValue && + (fxSense.Value.ASC == 0x00 && fxSense.Value.ASCQ != 0x04 || fxSense.Value.ASC != 0x00)) + { + StoppingErrorMessage?.Invoke("Drive could not rewind, please correct. Sense follows..." + + Environment.NewLine + strSense); + dumpLog.WriteLine("Drive could not rewind, please correct. Sense follows..."); + dumpLog.WriteLine("Device not ready. Sense {0}h ASC {1:X2}h ASCQ {2:X2}h", fxSense.Value.SenseKey, + fxSense.Value.ASC, fxSense.Value.ASCQ); + return; + } } bool ret = (outputPlugin as IWritableTapeImage).SetTape(); diff --git a/DiscImageChef.Gui/Forms/frmDump.xeto.cs b/DiscImageChef.Gui/Forms/frmDump.xeto.cs index e1ac09660..c14fae19c 100644 --- a/DiscImageChef.Gui/Forms/frmDump.xeto.cs +++ b/DiscImageChef.Gui/Forms/frmDump.xeto.cs @@ -369,7 +369,8 @@ namespace DiscImageChef.Gui.Forms return; } - if(resume == null || resume.NextBlock <= resume.LastBlock || resume.BadBlocks.Count != 0) return; + if(resume == null || resume.NextBlock <= resume.LastBlock || + resume.BadBlocks.Count != 0 && !resume.Tape) return; MessageBox.Show("Media already dumped correctly, please choose another destination...", MessageBoxType.Warning); diff --git a/DiscImageChef/Commands/DumpMedia.cs b/DiscImageChef/Commands/DumpMedia.cs index dc736d569..87a8823b1 100644 --- a/DiscImageChef/Commands/DumpMedia.cs +++ b/DiscImageChef/Commands/DumpMedia.cs @@ -214,7 +214,7 @@ namespace DiscImageChef.Commands return (int)ErrorNumber.InvalidResume; } - if(resume != null && resume.NextBlock > resume.LastBlock && resume.BadBlocks.Count == 0) + if(resume != null && resume.NextBlock > resume.LastBlock && resume.BadBlocks.Count == 0 && !resume.Tape) { DicConsole.WriteLine("Media already dumped correctly, not continuing..."); return (int)ErrorNumber.AlreadyDumped;