mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Remove all exceptions inside dumpers.
This commit is contained in:
@@ -55,7 +55,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Dumps an ATA device
|
/// Dumps an ATA device
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <exception cref="InvalidOperationException">If the resume file is invalid</exception>
|
|
||||||
public void Ata()
|
public void Ata()
|
||||||
{
|
{
|
||||||
bool aborted;
|
bool aborted;
|
||||||
@@ -152,7 +151,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
ResumeSupport.Process(ataReader.IsLba, removable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
ResumeSupport.Process(ataReader.IsLba, removable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
||||||
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
||||||
if(currentTry == null || extents == null)
|
if(currentTry == null || extents == null)
|
||||||
throw new InvalidOperationException("Could not process resume file, not continuing...");
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not process resume file, not continuing...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
MhddLog mhddLog;
|
MhddLog mhddLog;
|
||||||
IbgLog ibgLog;
|
IbgLog ibgLog;
|
||||||
@@ -520,7 +522,11 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
FiltersList filters = new FiltersList();
|
FiltersList filters = new FiltersList();
|
||||||
IFilter filter = filters.GetFilter(outputPath);
|
IFilter filter = filters.GetFilter(outputPath);
|
||||||
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
||||||
if(!inputPlugin.Open(filter)) throw new ArgumentException("Could not open created image.");
|
if(!inputPlugin.Open(filter))
|
||||||
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not open created image.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
||||||
|
|||||||
@@ -67,9 +67,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
/// Dumps a compact disc
|
/// Dumps a compact disc
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dskType">Disc type as detected in MMC layer</param>
|
/// <param name="dskType">Disc type as detected in MMC layer</param>
|
||||||
/// <exception cref="NotImplementedException">If trying to dump scrambled sectors</exception>
|
|
||||||
/// <exception cref="InvalidOperationException">If the resume file is invalid</exception>
|
|
||||||
/// <exception cref="ArgumentOutOfRangeException">If the track type is unknown (never)</exception>
|
|
||||||
internal void CompactDisc(ref MediaType dskType, bool dumpFirstTrackPregap)
|
internal void CompactDisc(ref MediaType dskType, bool dumpFirstTrackPregap)
|
||||||
{
|
{
|
||||||
uint subSize;
|
uint subSize;
|
||||||
@@ -835,7 +832,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
ResumeSupport.Process(true, true, blocks, dev.Manufacturer, dev.Model, dev.Serial, dev.PlatformId,
|
ResumeSupport.Process(true, true, blocks, dev.Manufacturer, dev.Model, dev.Serial, dev.PlatformId,
|
||||||
ref resume, ref currentTry, ref extents);
|
ref resume, ref currentTry, ref extents);
|
||||||
if(currentTry == null || extents == null)
|
if(currentTry == null || extents == null)
|
||||||
throw new InvalidOperationException("Could not process resume file, not continuing...");
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not process resume file, not continuing...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime timeSpeedStart = DateTime.UtcNow;
|
DateTime timeSpeedStart = DateTime.UtcNow;
|
||||||
ulong sectorSpeedStart = 0;
|
ulong sectorSpeedStart = 0;
|
||||||
@@ -1809,7 +1809,8 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
|
|
||||||
// Cannot write tag to image
|
// Cannot write tag to image
|
||||||
dumpLog.WriteLine($"Cannot write tag {tag.Key}.");
|
dumpLog.WriteLine($"Cannot write tag {tag.Key}.");
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
StoppingErrorMessage?.Invoke(outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
resume.BadBlocks.Sort();
|
resume.BadBlocks.Sort();
|
||||||
@@ -1838,7 +1839,11 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
FiltersList filters = new FiltersList();
|
FiltersList filters = new FiltersList();
|
||||||
IFilter filter = filters.GetFilter(outputPath);
|
IFilter filter = filters.GetFilter(outputPath);
|
||||||
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
||||||
if(!inputPlugin.Open(filter)) throw new ArgumentException("Could not open created image.");
|
if(!inputPlugin.Open(filter))
|
||||||
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not open created image.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
default:
|
default:
|
||||||
dumpLog.WriteLine("Unknown device type.");
|
dumpLog.WriteLine("Unknown device type.");
|
||||||
dumpLog.Close();
|
dumpLog.Close();
|
||||||
throw new NotSupportedException("Unknown device type.");
|
StoppingErrorMessage?.Invoke("Unknown device type.");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dumpLog.Close();
|
dumpLog.Close();
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DiscImageChef.CommonTypes;
|
using DiscImageChef.CommonTypes;
|
||||||
using DiscImageChef.CommonTypes.Enums;
|
using DiscImageChef.CommonTypes.Enums;
|
||||||
using DiscImageChef.Console;
|
|
||||||
using DiscImageChef.Decoders.Bluray;
|
using DiscImageChef.Decoders.Bluray;
|
||||||
using DiscImageChef.Decoders.DVD;
|
using DiscImageChef.Decoders.DVD;
|
||||||
using DiscImageChef.Decoders.SCSI;
|
using DiscImageChef.Decoders.SCSI;
|
||||||
@@ -71,7 +70,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
/// <param name="dumpLeadIn">Try to read and dump as much Lead-in as possible</param>
|
/// <param name="dumpLeadIn">Try to read and dump as much Lead-in as possible</param>
|
||||||
/// <param name="outputPath">Path to output file</param>
|
/// <param name="outputPath">Path to output file</param>
|
||||||
/// <param name="formatOptions">Formats to pass to output file plugin</param>
|
/// <param name="formatOptions">Formats to pass to output file plugin</param>
|
||||||
/// <exception cref="NotImplementedException">If trying to dump GOD or WOD, or XGDs without a Kreon drive</exception>
|
|
||||||
internal void Mmc(ref MediaType dskType, bool dumpLeadIn)
|
internal void Mmc(ref MediaType dskType, bool dumpLeadIn)
|
||||||
{
|
{
|
||||||
bool sense;
|
bool sense;
|
||||||
@@ -208,8 +206,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
nintendoPfi.Value.PartVersion == 15)
|
nintendoPfi.Value.PartVersion == 15)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Dumping Nintendo GameCube or Wii discs is not yet implemented.");
|
dumpLog.WriteLine("Dumping Nintendo GameCube or Wii discs is not yet implemented.");
|
||||||
throw new
|
StoppingErrorMessage
|
||||||
NotImplementedException("Dumping Nintendo GameCube or Wii discs is not yet implemented.");
|
?.Invoke("Dumping Nintendo GameCube or Wii discs is not yet implemented.");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,14 +318,15 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
!Inquiry.Decode(inqBuf).Value.KreonPresent)
|
!Inquiry.Decode(inqBuf).Value.KreonPresent)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Dumping Xbox Game Discs requires a drive with Kreon firmware.");
|
dumpLog.WriteLine("Dumping Xbox Game Discs requires a drive with Kreon firmware.");
|
||||||
throw new
|
StoppingErrorMessage
|
||||||
NotImplementedException("Dumping Xbox Game Discs requires a drive with Kreon firmware.");
|
?.Invoke("Dumping Xbox Game Discs requires a drive with Kreon firmware.");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dumpRaw && !force)
|
if(dumpRaw && !force)
|
||||||
{
|
{
|
||||||
DicConsole
|
StoppingErrorMessage
|
||||||
.ErrorWriteLine("Not continuing. If you want to continue reading cooked data when raw is not available use the force option.");
|
?.Invoke("Not continuing. If you want to continue reading cooked data when raw is not available use the force option.");
|
||||||
// TODO: Exit more gracefully
|
// TODO: Exit more gracefully
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
// Copyright © 2011-2019 Natalia Portillo
|
// Copyright © 2011-2019 Natalia Portillo
|
||||||
// ****************************************************************************/
|
// ****************************************************************************/
|
||||||
|
|
||||||
using System;
|
|
||||||
|
|
||||||
// ReSharper disable InconsistentNaming
|
// ReSharper disable InconsistentNaming
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
{
|
{
|
||||||
public void NVMe()
|
public void NVMe()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException("NVMe devices not yet supported.");
|
StoppingErrorMessage?.Invoke("NVMe devices not yet supported.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Dumps a CFW PlayStation Portable UMD
|
/// Dumps a CFW PlayStation Portable UMD
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <exception cref="ArgumentException">If you asked to dump long sectors from a SCSI Streaming device</exception>
|
|
||||||
void PlayStationPortable()
|
void PlayStationPortable()
|
||||||
{
|
{
|
||||||
if(!outputPlugin.SupportedMediaTypes.Contains(MediaType.MemoryStickDuo) &&
|
if(!outputPlugin.SupportedMediaTypes.Contains(MediaType.MemoryStickDuo) &&
|
||||||
@@ -276,7 +275,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
ResumeSupport.Process(true, dev.IsRemovable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
ResumeSupport.Process(true, dev.IsRemovable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
||||||
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
||||||
if(currentTry == null || extents == null)
|
if(currentTry == null || extents == null)
|
||||||
throw new InvalidOperationException("Could not process resume file, not continuing...");
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not process resume file, not continuing...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock);
|
if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock);
|
||||||
bool newTrim = false;
|
bool newTrim = false;
|
||||||
@@ -587,7 +589,11 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
FiltersList filters = new FiltersList();
|
FiltersList filters = new FiltersList();
|
||||||
IFilter filter = filters.GetFilter(outputPath);
|
IFilter filter = filters.GetFilter(outputPath);
|
||||||
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
||||||
if(!inputPlugin.Open(filter)) throw new ArgumentException("Could not open created image.");
|
if(!inputPlugin.Open(filter))
|
||||||
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not open created image.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
||||||
@@ -733,7 +739,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
ResumeSupport.Process(true, dev.IsRemovable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
ResumeSupport.Process(true, dev.IsRemovable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
||||||
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
||||||
if(currentTry == null || extents == null)
|
if(currentTry == null || extents == null)
|
||||||
throw new InvalidOperationException("Could not process resume file, not continuing...");
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not process resume file, not continuing...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock);
|
if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock);
|
||||||
bool newTrim = false;
|
bool newTrim = false;
|
||||||
@@ -1050,7 +1059,11 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
FiltersList filters = new FiltersList();
|
FiltersList filters = new FiltersList();
|
||||||
IFilter filter = filters.GetFilter(outputPath);
|
IFilter filter = filters.GetFilter(outputPath);
|
||||||
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
||||||
if(!inputPlugin.Open(filter)) throw new ArgumentException("Could not open created image.");
|
if(!inputPlugin.Open(filter))
|
||||||
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not open created image.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
/// <param name="dskType">Disc type as detected in SCSI or MMC layer</param>
|
/// <param name="dskType">Disc type as detected in SCSI or MMC layer</param>
|
||||||
/// <param name="outputPath">Path to output file</param>
|
/// <param name="outputPath">Path to output file</param>
|
||||||
/// <param name="formatOptions">Formats to pass to output file plugin</param>
|
/// <param name="formatOptions">Formats to pass to output file plugin</param>
|
||||||
/// <exception cref="InvalidOperationException">If the resume file is invalid</exception>
|
|
||||||
internal void Sbc(Dictionary<MediaTagType, byte[]> mediaTags, ref MediaType dskType, bool opticalDisc)
|
internal void Sbc(Dictionary<MediaTagType, byte[]> mediaTags, ref MediaType dskType, bool opticalDisc)
|
||||||
{
|
{
|
||||||
bool sense;
|
bool sense;
|
||||||
@@ -354,7 +353,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
ResumeSupport.Process(true, dev.IsRemovable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
ResumeSupport.Process(true, dev.IsRemovable, blocks, dev.Manufacturer, dev.Model, dev.Serial,
|
||||||
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
dev.PlatformId, ref resume, ref currentTry, ref extents);
|
||||||
if(currentTry == null || extents == null)
|
if(currentTry == null || extents == null)
|
||||||
throw new InvalidOperationException("Could not process resume file, not continuing...");
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not process resume file, not continuing...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(resume.NextBlock > 0)
|
if(resume.NextBlock > 0)
|
||||||
{
|
{
|
||||||
@@ -694,8 +696,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
|
|
||||||
// Cannot write tag to image
|
// Cannot write tag to image
|
||||||
StoppingErrorMessage?.Invoke($"Cannot write tag {tag.Key}.");
|
StoppingErrorMessage?.Invoke($"Cannot write tag {tag.Key}.");
|
||||||
dumpLog.WriteLine($"Cannot write tag {tag.Key}.");
|
dumpLog.WriteLine($"Cannot write tag {tag.Key}." + Environment.NewLine +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -710,8 +713,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write USB descriptors.");
|
dumpLog.WriteLine("Cannot write USB descriptors.");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write USB descriptors.");
|
StoppingErrorMessage?.Invoke("Cannot write USB descriptors." + Environment.NewLine +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -728,8 +732,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write ATAPI IDENTIFY PACKET DEVICE.");
|
dumpLog.WriteLine("Cannot write ATAPI IDENTIFY PACKET DEVICE.");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write ATAPI IDENTIFY PACKET DEVICE.");
|
StoppingErrorMessage?.Invoke("Cannot write ATAPI IDENTIFY PACKET DEVICE." +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
Environment.NewLine +
|
||||||
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -744,8 +750,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
StoppingErrorMessage?.Invoke("Cannot write SCSI INQUIRY.");
|
StoppingErrorMessage?.Invoke("Cannot write SCSI INQUIRY.");
|
||||||
dumpLog.WriteLine("Cannot write SCSI INQUIRY.");
|
dumpLog.WriteLine("Cannot write SCSI INQUIRY." + Environment.NewLine +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateStatus?.Invoke("Requesting MODE SENSE (10).");
|
UpdateStatus?.Invoke("Requesting MODE SENSE (10).");
|
||||||
@@ -767,8 +774,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write SCSI MODE SENSE (10).");
|
dumpLog.WriteLine("Cannot write SCSI MODE SENSE (10).");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write SCSI MODE SENSE (10).");
|
StoppingErrorMessage?.Invoke("Cannot write SCSI MODE SENSE (10)." +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
Environment.NewLine +
|
||||||
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -790,8 +799,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write SCSI MODE SENSE (6).");
|
dumpLog.WriteLine("Cannot write SCSI MODE SENSE (6).");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write SCSI MODE SENSE (6).");
|
StoppingErrorMessage?.Invoke("Cannot write SCSI MODE SENSE (6)." +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
Environment.NewLine +
|
||||||
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -827,7 +838,11 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
FiltersList filters = new FiltersList();
|
FiltersList filters = new FiltersList();
|
||||||
IFilter filter = filters.GetFilter(outputPath);
|
IFilter filter = filters.GetFilter(outputPath);
|
||||||
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
||||||
if(!inputPlugin.Open(filter)) throw new ArgumentException("Could not open created image.");
|
if(!inputPlugin.Open(filter))
|
||||||
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not open created image.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
||||||
|
|||||||
@@ -210,7 +210,11 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
switch(dev.ScsiType)
|
switch(dev.ScsiType)
|
||||||
{
|
{
|
||||||
case PeripheralDeviceTypes.SequentialAccess:
|
case PeripheralDeviceTypes.SequentialAccess:
|
||||||
if(dumpRaw) throw new ArgumentException("Tapes cannot be dumped raw.");
|
if(dumpRaw)
|
||||||
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Tapes cannot be dumped raw.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Ssc();
|
Ssc();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -239,7 +239,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
ResumeSupport.Process(true, false, blocks, dev.Manufacturer, dev.Model, dev.Serial, dev.PlatformId,
|
ResumeSupport.Process(true, false, blocks, dev.Manufacturer, dev.Model, dev.Serial, dev.PlatformId,
|
||||||
ref resume, ref currentTry, ref extents);
|
ref resume, ref currentTry, ref extents);
|
||||||
if(currentTry == null || extents == null)
|
if(currentTry == null || extents == null)
|
||||||
throw new InvalidOperationException("Could not process resume file, not continuing...");
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not process resume file, not continuing...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
|
|
||||||
@@ -493,7 +496,7 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
FiltersList filters = new FiltersList();
|
FiltersList filters = new FiltersList();
|
||||||
IFilter filter = filters.GetFilter(outputPath);
|
IFilter filter = filters.GetFilter(outputPath);
|
||||||
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
||||||
if(!inputPlugin.Open(filter)) throw new ArgumentException("Could not open created image.");
|
if(!inputPlugin.Open(filter)) StoppingErrorMessage?.Invoke("Could not open created image.");
|
||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
||||||
@@ -535,8 +538,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write CID to output image.");
|
dumpLog.WriteLine("Cannot write CID to output image.");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write CID to output image.");
|
StoppingErrorMessage?.Invoke("Cannot write CID to output image." + Environment.NewLine +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -557,8 +561,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write CSD to output image.");
|
dumpLog.WriteLine("Cannot write CSD to output image.");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write CSD to output image.");
|
StoppingErrorMessage?.Invoke("Cannot write CSD to output image." + Environment.NewLine +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,8 +580,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write Extended CSD to output image.");
|
dumpLog.WriteLine("Cannot write Extended CSD to output image.");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write Extended CSD to output image.");
|
StoppingErrorMessage?.Invoke("Cannot write Extended CSD to output image." +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
Environment.NewLine +
|
||||||
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -597,8 +604,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write OCR to output image.");
|
dumpLog.WriteLine("Cannot write OCR to output image.");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write OCR to output image.");
|
StoppingErrorMessage?.Invoke("Cannot write OCR to output image." + Environment.NewLine +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -615,8 +623,9 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(!ret && !force)
|
if(!ret && !force)
|
||||||
{
|
{
|
||||||
dumpLog.WriteLine("Cannot write SCR to output image.");
|
dumpLog.WriteLine("Cannot write SCR to output image.");
|
||||||
StoppingErrorMessage?.Invoke("Cannot write SCR to output image.");
|
StoppingErrorMessage?.Invoke("Cannot write SCR to output image." + Environment.NewLine +
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,10 +77,6 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
/// <param name="dskType">Disc type as detected in MMC layer</param>
|
/// <param name="dskType">Disc type as detected in MMC layer</param>
|
||||||
/// <param name="outputPath">Path to output file</param>
|
/// <param name="outputPath">Path to output file</param>
|
||||||
/// <param name="formatOptions">Formats to pass to output file plugin</param>
|
/// <param name="formatOptions">Formats to pass to output file plugin</param>
|
||||||
/// <exception cref="InvalidOperationException">
|
|
||||||
/// If the provided resume does not correspond with the current in progress
|
|
||||||
/// dump
|
|
||||||
/// </exception>
|
|
||||||
internal void Xgd(Dictionary<MediaTagType, byte[]> mediaTags, ref MediaType dskType)
|
internal void Xgd(Dictionary<MediaTagType, byte[]> mediaTags, ref MediaType dskType)
|
||||||
{
|
{
|
||||||
bool sense;
|
bool sense;
|
||||||
@@ -369,7 +365,7 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
ResumeSupport.Process(true, true, totalSize, dev.Manufacturer, dev.Model, dev.Serial, dev.PlatformId,
|
ResumeSupport.Process(true, true, totalSize, dev.Manufacturer, dev.Model, dev.Serial, dev.PlatformId,
|
||||||
ref resume, ref currentTry, ref extents);
|
ref resume, ref currentTry, ref extents);
|
||||||
if(currentTry == null || extents == null)
|
if(currentTry == null || extents == null)
|
||||||
throw new NotImplementedException("Could not process resume file, not continuing...");
|
StoppingErrorMessage?.Invoke("Could not process resume file, not continuing...");
|
||||||
|
|
||||||
(outputPlugin as IWritableOpticalImage).SetTracks(new List<Track>
|
(outputPlugin as IWritableOpticalImage).SetTracks(new List<Track>
|
||||||
{
|
{
|
||||||
@@ -907,9 +903,10 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
if(ret || force) continue;
|
if(ret || force) continue;
|
||||||
|
|
||||||
// Cannot write tag to image
|
// Cannot write tag to image
|
||||||
StoppingErrorMessage?.Invoke($"Cannot write tag {tag.Key}.");
|
|
||||||
dumpLog.WriteLine($"Cannot write tag {tag.Key}.");
|
dumpLog.WriteLine($"Cannot write tag {tag.Key}.");
|
||||||
throw new ArgumentException(outputPlugin.ErrorMessage);
|
StoppingErrorMessage?.Invoke($"Cannot write tag {tag.Key}." + Environment.NewLine +
|
||||||
|
outputPlugin.ErrorMessage);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
resume.BadBlocks.Sort();
|
resume.BadBlocks.Sort();
|
||||||
@@ -941,7 +938,11 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
FiltersList filters = new FiltersList();
|
FiltersList filters = new FiltersList();
|
||||||
IFilter filter = filters.GetFilter(outputPath);
|
IFilter filter = filters.GetFilter(outputPath);
|
||||||
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
IMediaImage inputPlugin = ImageFormat.Detect(filter);
|
||||||
if(!inputPlugin.Open(filter)) throw new ArgumentException("Could not open created image.");
|
if(!inputPlugin.Open(filter))
|
||||||
|
{
|
||||||
|
StoppingErrorMessage?.Invoke("Could not open created image.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime chkStart = DateTime.UtcNow;
|
DateTime chkStart = DateTime.UtcNow;
|
||||||
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
|
||||||
|
|||||||
Reference in New Issue
Block a user