Remove separate dump log, use central log facility.

This commit is contained in:
2025-08-19 15:17:19 +01:00
parent f57a5635d9
commit 05906c8818
41 changed files with 704 additions and 1846 deletions

View File

@@ -45,6 +45,7 @@ using Aaru.Core.Graphics;
using Aaru.Core.Logging;
using Aaru.Decoders.ATA;
using Aaru.Decoders.PCMCIA;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using Humanizer.Localisation;
@@ -85,7 +86,6 @@ public partial class Dump
MediaType mediaType = MediaType.Unknown;
UpdateStatus?.Invoke(Localization.Core.Requesting_ATA_IDENTIFY_DEVICE);
_dumpLog.WriteLine(Localization.Core.Requesting_ATA_IDENTIFY_DEVICE);
bool sense = _dev.AtaIdentify(out byte[] cmdBuf, out AtaErrorRegistersChs errorChs);
if(sense)
@@ -107,7 +107,6 @@ public partial class Dump
// Initialize reader
UpdateStatus?.Invoke(Localization.Core.Initializing_reader);
_dumpLog.WriteLine(Localization.Core.Initializing_reader);
var ataReader = new Reader(_dev, timeout, ataIdentify, _errorLog);
// Fill reader blocks
@@ -116,7 +115,7 @@ public partial class Dump
// Check block sizes
if(ataReader.GetBlockSize())
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_get_block_size_0, ataReader.ErrorMessage);
AaruLogging.Error(Localization.Core.ERROR_Cannot_get_block_size_0, ataReader.ErrorMessage);
ErrorMessage(ataReader.ErrorMessage);
return;
@@ -127,8 +126,8 @@ public partial class Dump
if(ataReader.FindReadCommand())
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_find_correct_read_command_0,
ataReader.ErrorMessage);
AaruLogging.Error(Localization.Core.ERROR_Cannot_find_correct_read_command_0,
ataReader.ErrorMessage);
ErrorMessage(ataReader.ErrorMessage);
@@ -138,7 +137,7 @@ public partial class Dump
// Check how many blocks to read, if error show and return
if(ataReader.GetBlocksToRead(_maximumReadable))
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_get_blocks_to_read_0, ataReader.ErrorMessage);
AaruLogging.Error(Localization.Core.ERROR_Cannot_get_blocks_to_read_0, ataReader.ErrorMessage);
ErrorMessage(ataReader.ErrorMessage);
return;
@@ -167,17 +166,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Device_reports_0_bytes_per_physical_block,
physicalSectorSize));
_dumpLog.WriteLine(Localization.Core.Device_reports_0_blocks_1_bytes, blocks, blocks * blockSize);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_cylinders_1_heads_2_sectors_per_track,
cylinders,
heads,
sectors);
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_at_a_time, blocksToRead);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_logical_block, blockSize);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_physical_block, physicalSectorSize);
bool removable = !_dev.IsCompactFlash &&
ataId.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit.Removable);
@@ -209,14 +197,13 @@ public partial class Dump
IbgLog ibgLog;
double duration;
var ret = true;
bool ret = true;
if(_dev.IsUsb &&
_dev.UsbDescriptors != null &&
!outputFormat.SupportedMediaTags.Contains(MediaTagType.USB_Descriptors))
{
ret = false;
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_USB_descriptors);
ErrorMessage(Localization.Core.Output_format_does_not_support_USB_descriptors);
}
@@ -225,27 +212,21 @@ public partial class Dump
!outputFormat.SupportedMediaTags.Contains(MediaTagType.PCMCIA_CIS))
{
ret = false;
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_PCMCIA_CIS_descriptors);
ErrorMessage(Localization.Core.Output_format_does_not_support_PCMCIA_CIS_descriptors);
}
if(!outputFormat.SupportedMediaTags.Contains(MediaTagType.ATA_IDENTIFY))
{
ret = false;
_dumpLog.WriteLine(Localization.Core.Dump_Ata_Output_format_does_not_support_ATA_IDENTIFY_);
ErrorMessage(Localization.Core.Dump_Ata_Output_format_does_not_support_ATA_IDENTIFY_);
}
if(!ret)
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_continuing);
ErrorMessage(Localization.Core.Several_media_tags_not_supported_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_not_continuing);
return;
@@ -264,9 +245,6 @@ public partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -296,10 +274,7 @@ public partial class Dump
ibgLog = new IbgLog(_outputPrefix + ".ibg", ataProfile);
if(_resume.NextBlock > 0)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Resuming_from_block_0, _resume.NextBlock));
_dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
}
if(_createGraph)
{
@@ -319,7 +294,7 @@ public partial class Dump
_mediaGraph?.PaintSectorsBad(_resume.BadBlocks);
}
var newTrim = false;
bool newTrim = false;
_dumpStopwatch.Restart();
_speedStopwatch.Reset();
@@ -332,7 +307,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -378,7 +352,11 @@ public partial class Dump
ibgLog.Write(i, 0);
outputFormat.WriteSectors(new byte[blockSize * _skip], i, _skip);
imageWriteDuration += _writeStopwatch.Elapsed.TotalSeconds;
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
UpdateProgress?.Invoke(Localization.Core.Skipping_0_blocks_from_errored_block_1,
_skip,
(long)i);
i += _skip - blocksToRead;
newTrim = true;
}
@@ -426,18 +404,6 @@ public partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize());
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Trimming
@@ -445,7 +411,6 @@ public partial class Dump
{
_trimStopwatch.Restart();
UpdateStatus?.Invoke(Localization.Core.Trimming_skipped_sectors);
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
ulong[] tmpArray = _resume.BadBlocks.ToArray();
InitProgress?.Invoke();
@@ -456,7 +421,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -481,9 +445,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
#endregion Trimming
@@ -492,8 +453,8 @@ public partial class Dump
if(_resume.BadBlocks.Count > 0 && !_aborted && _retryPasses > 0)
{
var pass = 1;
var forward = true;
int pass = 1;
bool forward = true;
InitProgress?.Invoke();
repeatRetryLba:
@@ -505,7 +466,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -551,10 +511,6 @@ public partial class Dump
.Correctly_retried_block_0_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1,
badSector,
pass);
}
else if(_persistent) outputFormat.WriteSector(cmdBuf, badSector);
}
@@ -624,7 +580,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -663,11 +618,6 @@ public partial class Dump
imageWriteDuration += _writeStopwatch.Elapsed.TotalSeconds;
extents.Add(currentBlock);
_mediaGraph?.PaintSectorGood((ulong)((cy * heads + hd) * sectors + (sc - 1)));
_dumpLog.WriteLine(Localization.Core.Error_reading_cylinder_0_head_1_sector_2,
cy,
hd,
sc);
}
else
{
@@ -725,23 +675,10 @@ public partial class Dump
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize());
_dumpLog.WriteLine(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize());
}
foreach(ulong bad in _resume.BadBlocks)
_dumpLog.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
AaruLogging.Information(Localization.Core.Sector_0_could_not_be_read, bad);
outputFormat.SetDumpHardware(_resume.Tries);
@@ -761,7 +698,6 @@ public partial class Dump
if(_preSidecar != null) outputFormat.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputFormat.Close();
@@ -770,12 +706,9 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
_dumpLog.WriteLine(Localization.Core.Aborted);
UpdateStatus?.Invoke(Localization.Core.Aborted);
return;
@@ -792,7 +725,6 @@ public partial class Dump
if(_metadata)
{
_dumpLog.WriteLine(Localization.Core.Creating_sidecar);
UpdateStatus?.Invoke(Localization.Core.Creating_sidecar);
IFilter filter = PluginRegister.Singleton.GetFilter(_outputPath);
var inputPlugin = ImageFormat.Detect(filter) as IMediaImage;
@@ -829,7 +761,6 @@ public partial class Dump
if(_dev.IsUsb && _dev.UsbDescriptors != null)
{
_dumpLog.WriteLine(Localization.Core.Reading_USB_descriptors);
UpdateStatus?.Invoke(Localization.Core.Reading_USB_descriptors);
sidecar.BlockMedias[0].Usb = new Usb
@@ -847,7 +778,6 @@ public partial class Dump
if(_dev.IsPcmcia && _dev.Cis != null)
{
_dumpLog.WriteLine(Localization.Core.Reading_PCMCIA_CIS);
UpdateStatus?.Invoke(Localization.Core.Reading_PCMCIA_CIS);
sidecar.BlockMedias[0].Pcmcia = new Pcmcia
@@ -860,7 +790,6 @@ public partial class Dump
}
};
_dumpLog.WriteLine(Localization.Core.Decoding_PCMCIA_CIS);
UpdateStatus?.Invoke(Localization.Core.Decoding_PCMCIA_CIS);
Tuple[] tuples = CIS.GetTuples(_dev.Cis);
@@ -931,14 +860,6 @@ public partial class Dump
.Per(totalChkDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
List<(ulong start, string type)> filesystems = [];
if(sidecar.BlockMedias[0].FileSystemInformation != null)
@@ -961,10 +882,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start));
_dumpLog.WriteLine(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start);
}
}

View File

@@ -60,7 +60,7 @@ partial class Dump
byte[] syncMark = [0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00];
var testMark = new byte[12];
byte[] testMark = new byte[12];
Array.Copy(sector, 0, testMark, 0, 12);
return syncMark.SequenceEqual(testMark) && (sector[0xF] == 0 || sector[0xF] == 1 || sector[0xF] == 2);
@@ -79,9 +79,9 @@ partial class Dump
byte[] syncMark = [0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00];
var testMark = new byte[12];
byte[] testMark = new byte[12];
for(var i = 0; i <= 2336; i++)
for(int i = 0; i <= 2336; i++)
{
Array.Copy(sector, i, testMark, 0, 12);
@@ -162,7 +162,6 @@ partial class Dump
if(cdiReadyReadAsAudio)
{
_dumpLog.WriteLine(Localization.Core.Setting_speed_to_8x_for_CD_i_Ready_reading_as_audio);
UpdateStatus?.Invoke(Localization.Core.Setting_speed_to_8x_for_CD_i_Ready_reading_as_audio);
_dev.SetCdSpeed(out _, RotationalControl.ClvAndImpureCav, 1416, 0, _dev.Timeout, out _);
@@ -176,12 +175,11 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
var firstSectorToRead = (uint)i;
uint firstSectorToRead = (uint)i;
blocksToRead = _maximumReadable;
@@ -290,8 +288,8 @@ partial class Dump
if(supportedSubchannel != MmcSubchannel.None)
{
var data = new byte[sectorSize];
var sub = new byte[subSize];
byte[] data = new byte[sectorSize];
byte[] sub = new byte[subSize];
Array.Copy(cmdBuf, 0, data, 0, sectorSize);
@@ -316,7 +314,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -349,10 +346,6 @@ partial class Dump
i + r,
firstTrack.EndSector));
_dumpLog.WriteLine(Localization.Core.Adding_CD_i_Ready_hole_from_LBA_0_to_1_inclusive,
i + r,
firstTrack.EndSector);
break;
}
@@ -393,11 +386,11 @@ partial class Dump
if(supportedSubchannel != MmcSubchannel.None)
{
var data = new byte[sectorSize * blocksToRead];
var sub = new byte[subSize * blocksToRead];
var tmpData = new byte[sectorSize];
byte[] data = new byte[sectorSize * blocksToRead];
byte[] sub = new byte[subSize * blocksToRead];
byte[] tmpData = new byte[sectorSize];
for(var b = 0; b < blocksToRead; b++)
for(int b = 0; b < blocksToRead; b++)
{
if(cdiReadyReadAsAudio)
{
@@ -428,7 +421,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -455,10 +447,10 @@ partial class Dump
{
if(cdiReadyReadAsAudio)
{
var tmpData = new byte[sectorSize];
var data = new byte[sectorSize * blocksToRead];
byte[] tmpData = new byte[sectorSize];
byte[] data = new byte[sectorSize * blocksToRead];
for(var b = 0; b < blocksToRead; b++)
for(int b = 0; b < blocksToRead; b++)
{
Array.Copy(cmdBuf, (int)(b * sectorSize), tmpData, 0, sectorSize);
tmpData = Sector.Scramble(tmpData);

View File

@@ -133,7 +133,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -218,7 +217,6 @@ partial class Dump
switch(inData)
{
case false when currentReadSpeed == 0xFFFF:
_dumpLog.WriteLine(Localization.Core.Setting_speed_to_8x_for_audio_reading);
UpdateStatus?.Invoke(Localization.Core.Setting_speed_to_8x_for_audio_reading);
_dev.SetCdSpeed(out _, RotationalControl.ClvAndImpureCav, 1416, 0, _dev.Timeout, out _);
@@ -228,11 +226,6 @@ partial class Dump
break;
case true when currentReadSpeed != _speed:
{
_dumpLog.WriteLine(_speed == 0xFFFF
? Localization.Core.Setting_speed_to_MAX_for_data_reading
: string.Format(Localization.Core.Setting_speed_to_0_x_for_data_reading,
_speed));
UpdateStatus?.Invoke(_speed == 0xFFFF
? Localization.Core.Setting_speed_to_MAX_for_data_reading
: string.Format(Localization.Core.Setting_speed_to_0_x_for_data_reading,
@@ -814,7 +807,6 @@ partial class Dump
outputFormat as IWritableOpticalImage,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -903,14 +895,12 @@ partial class Dump
_resume.BadBlocks.Add(i + r);
AaruLogging.Debug(MODULE_NAME,
Localization.Core.READ_error_0,
Sense.PrettifySense(senseBuf));
AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf));
mhddLog.Write(i + r, cmdDuration < 500 ? 65535 : cmdDuration);
ibgLog.Write(i + r, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, 1, i + r);
ibgLog.Write(i + r, 0);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, 1, i + r);
newTrim = true;
}
@@ -1003,7 +993,6 @@ partial class Dump
outputFormat as IWritableOpticalImage,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -1108,7 +1097,7 @@ partial class Dump
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}
@@ -1135,7 +1124,6 @@ partial class Dump
if(!failedCrossingLeadOut) return;
_dumpLog.WriteLine(Localization.Core.Failed_crossing_into_Lead_Out);
UpdateStatus?.Invoke(Localization.Core.Failed_crossing_into_Lead_Out);
}
}

View File

@@ -127,14 +127,13 @@ sealed partial class Dump
if(_dumpRaw)
{
_dumpLog.WriteLine(Localization.Core.Raw_CD_dumping_not_yet_implemented);
AaruLogging.WriteLine(Localization.Core.Raw_CD_dumping_not_yet_implemented);
StoppingErrorMessage?.Invoke(Localization.Core.Raw_CD_dumping_not_yet_implemented);
return;
}
tracks = GetCdTracks(_dev,
_dumpLog,
_force,
out lastSector,
leadOutStarts,
@@ -146,7 +145,7 @@ sealed partial class Dump
if(tracks is null)
{
_dumpLog.WriteLine(Localization.Core.Could_not_get_tracks);
AaruLogging.WriteLine(Localization.Core.Could_not_get_tracks);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_get_tracks);
return;
@@ -155,11 +154,11 @@ sealed partial class Dump
firstLba = (uint)tracks.Min(t => t.StartSector);
// Check subchannels support
supportsPqSubchannel = SupportsPqSubchannel(_dev, _dumpLog, UpdateStatus, firstLba) ||
SupportsPqSubchannel(_dev, _dumpLog, UpdateStatus, firstLba + 5);
supportsPqSubchannel = SupportsPqSubchannel(_dev, UpdateStatus, firstLba) ||
SupportsPqSubchannel(_dev, UpdateStatus, firstLba + 5);
supportsRwSubchannel = SupportsRwSubchannel(_dev, _dumpLog, UpdateStatus, firstLba) ||
SupportsRwSubchannel(_dev, _dumpLog, UpdateStatus, firstLba + 5);
supportsRwSubchannel = SupportsRwSubchannel(_dev, UpdateStatus, firstLba) ||
SupportsRwSubchannel(_dev, UpdateStatus, firstLba + 5);
if(supportsRwSubchannel)
supportedSubchannel = MmcSubchannel.Raw;
@@ -184,8 +183,8 @@ sealed partial class Dump
desiredSubchannel = MmcSubchannel.Raw;
else
{
_dumpLog.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
AaruLogging.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
@@ -201,8 +200,8 @@ sealed partial class Dump
desiredSubchannel = MmcSubchannel.Q16;
else
{
_dumpLog.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
AaruLogging.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
@@ -216,8 +215,8 @@ sealed partial class Dump
desiredSubchannel = MmcSubchannel.Q16;
else
{
_dumpLog.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
AaruLogging.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
@@ -242,12 +241,12 @@ sealed partial class Dump
{
if(_force || _subchannel == DumpSubchannel.None)
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_subchannels_continuing);
AaruLogging.WriteLine(Localization.Core.Output_format_does_not_support_subchannels_continuing);
UpdateStatus?.Invoke(Localization.Core.Output_format_does_not_support_subchannels_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_subchannels_not_continuing);
AaruLogging.WriteLine(Localization.Core.Output_format_does_not_support_subchannels_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Output_format_does_not_support_subchannels_not_continuing);
@@ -261,7 +260,6 @@ sealed partial class Dump
switch(supportedSubchannel)
{
case MmcSubchannel.None:
_dumpLog.WriteLine(Localization.Core.Checking_if_drive_supports_reading_without_subchannel);
UpdateStatus?.Invoke(Localization.Core.Checking_if_drive_supports_reading_without_subchannel);
readcd = !_dev.ReadCd(out cmdBuf,
@@ -299,16 +297,14 @@ sealed partial class Dump
if(!readcd)
{
_dumpLog.WriteLine(Localization.Core.Drive_does_not_support_READ_CD_trying_SCSI_READ_commands);
AaruLogging.WriteLine(Localization.Core.Drive_does_not_support_READ_CD_trying_SCSI_READ_commands);
ErrorMessage?.Invoke(Localization.Core.Drive_does_not_support_READ_CD_trying_SCSI_READ_commands);
_dumpLog.WriteLine(Localization.Core.Checking_if_drive_supports_READ_6);
UpdateStatus?.Invoke(Localization.Core.Checking_if_drive_supports_READ_6);
read6 = !_dev.Read6(out cmdBuf, out _, firstLba, 2048, 1, _dev.Timeout, out _) ||
!_dev.Read6(out cmdBuf, out _, firstLba + 5, 2048, 1, _dev.Timeout, out _);
_dumpLog.WriteLine(Localization.Core.Checking_if_drive_supports_READ_10);
UpdateStatus?.Invoke(Localization.Core.Checking_if_drive_supports_READ_10);
read10 =
@@ -339,7 +335,6 @@ sealed partial class Dump
_dev.Timeout,
out _);
_dumpLog.WriteLine(Localization.Core.Checking_if_drive_supports_READ_12);
UpdateStatus?.Invoke(Localization.Core.Checking_if_drive_supports_READ_12);
read12 =
@@ -372,7 +367,6 @@ sealed partial class Dump
_dev.Timeout,
out _);
_dumpLog.WriteLine(Localization.Core.Checking_if_drive_supports_READ_16);
UpdateStatus?.Invoke(Localization.Core.Checking_if_drive_supports_READ_16);
read16 =
@@ -406,51 +400,34 @@ sealed partial class Dump
switch(read6)
{
case false when !read10 && !read12 && !read16:
_dumpLog.WriteLine(Localization.Core.Cannot_read_from_disc_not_continuing);
AaruLogging.WriteLine(Localization.Core.Cannot_read_from_disc_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_read_from_disc_not_continuing);
return;
case true:
_dumpLog.WriteLine(Localization.Core.Drive_supports_READ_6);
UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_6);
break;
}
if(read10)
{
_dumpLog.WriteLine(Localization.Core.Drive_supports_READ_10);
UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_10);
}
if(read10) UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_10);
if(read12)
{
_dumpLog.WriteLine(Localization.Core.Drive_supports_READ_12);
UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_12);
}
if(read12) UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_12);
if(read16)
{
_dumpLog.WriteLine(Localization.Core.Drive_supports_READ_16);
UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_16);
}
if(read16) UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_16);
}
_dumpLog.WriteLine(Localization.Core.Drive_can_read_without_subchannel);
UpdateStatus?.Invoke(Localization.Core.Drive_can_read_without_subchannel);
subSize = 0;
break;
case MmcSubchannel.Raw:
_dumpLog.WriteLine(Localization.Core.Full_raw_subchannel_reading_supported);
UpdateStatus?.Invoke(Localization.Core.Full_raw_subchannel_reading_supported);
subSize = 96;
break;
case MmcSubchannel.Q16:
_dumpLog.WriteLine(Localization.Core.PQ_subchannel_reading_supported);
_dumpLog.WriteLine(Localization.Core.WARNING_If_disc_says_CDG_CDEG_CDMIDI_dump_will_be_incorrect);
UpdateStatus?.Invoke(Localization.Core.PQ_subchannel_reading_supported);
UpdateStatus?.Invoke(Localization.Core.WARNING_If_disc_says_CDG_CDEG_CDMIDI_dump_will_be_incorrect);
@@ -504,25 +481,17 @@ sealed partial class Dump
bcdSubchannel = (tmpBuf[21] & 0x30) > 0;
if(bcdSubchannel)
{
_dumpLog.WriteLine(Localization.Core.Drive_returns_subchannel_in_BCD);
UpdateStatus?.Invoke(Localization.Core.Drive_returns_subchannel_in_BCD);
}
else
{
_dumpLog.WriteLine(Localization.Core.Drive_does_not_returns_subchannel_in_BCD);
UpdateStatus?.Invoke(Localization.Core.Drive_does_not_returns_subchannel_in_BCD);
}
}
}
foreach(Track trk in tracks) trk.SubchannelType = subType;
_dumpLog.WriteLine(Localization.Core.Calculating_pregaps__can_take_some_time);
UpdateStatus?.Invoke(Localization.Core.Calculating_pregaps__can_take_some_time);
SolveTrackPregaps(_dev,
_dumpLog,
UpdateStatus,
tracks,
supportsPqSubchannel,
@@ -532,25 +501,18 @@ sealed partial class Dump
true);
if(inexactPositioning)
{
_dumpLog.WriteLine(Localization.Core.The_drive_has_returned_incorrect_Q_positioning_calculating_pregaps);
UpdateStatus?.Invoke(Localization.Core.The_drive_has_returned_incorrect_Q_positioning_calculating_pregaps);
}
if(!outputOptical.OpticalCapabilities.HasFlag(OpticalImageCapabilities.CanStoreRawData))
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_storing_raw_data_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Output_format_does_not_support_storing_raw_data_not_continuing);
return;
}
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_storing_raw_data_continuing);
ErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_storing_raw_data_continuing);
}
@@ -558,8 +520,6 @@ sealed partial class Dump
if(!outputOptical.OpticalCapabilities.HasFlag(OpticalImageCapabilities.CanStoreAudioTracks) &&
tracks.Any(track => track.Type == TrackType.Audio))
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_audio_tracks_cannot_continue);
StoppingErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_audio_tracks_cannot_continue);
return;
@@ -571,14 +531,11 @@ sealed partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_pregaps_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_pregaps_not_continuing);
return;
}
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_pregaps_continuing);
ErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_pregaps_continuing);
}
@@ -624,7 +581,6 @@ sealed partial class Dump
// TODO: Disabled until 6.0
/*if(!_force)
{*/
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_sessions);
StoppingErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_sessions);
@@ -641,14 +597,9 @@ sealed partial class Dump
foreach(MediaTagType tag in mediaTags.Keys.Where(tag => !outputOptical.SupportedMediaTags.Contains(tag)))
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_0_continuing, tag);
ErrorMessage?.Invoke(string.Format(Localization.Core.Output_format_does_not_support_0_continuing, tag));
}
else
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_0_not_continuing, tag);
StoppingErrorMessage?.Invoke(string.Format(Localization.Core
.Output_format_does_not_support_0_not_continuing,
tag));
@@ -678,7 +629,6 @@ sealed partial class Dump
leadOutExtents.Add(dataExtentsArray[i].Item2 + 1, dataExtentsArray[i + 1].Item1 - 1);
}
_dumpLog.WriteLine(Localization.Core.Detecting_disc_type);
UpdateStatus?.Invoke(Localization.Core.Detecting_disc_type);
MMC.DetectDiscType(ref dskType,
@@ -696,13 +646,11 @@ sealed partial class Dump
if(hiddenTrack || firstLba > 0)
{
_dumpLog.WriteLine(Localization.Core.Disc_contains_a_hidden_track);
UpdateStatus?.Invoke(Localization.Core.Disc_contains_a_hidden_track);
if(!outputOptical.OpticalCapabilities.HasFlag(OpticalImageCapabilities.CanStoreHiddenTracks))
{
StoppingErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_hidden_tracks);
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_hidden_tracks);
return;
}
@@ -727,11 +675,7 @@ sealed partial class Dump
}
if(tracks.Any(t => t.Type == TrackType.Audio) && desiredSubchannel != MmcSubchannel.Raw)
{
_dumpLog.WriteLine(Localization.Core.WARNING_If_disc_says_CDG_CDEG_CDMIDI_dump_will_be_incorrect);
UpdateStatus?.Invoke(Localization.Core.WARNING_If_disc_says_CDG_CDEG_CDMIDI_dump_will_be_incorrect);
}
// Check mode for tracks
foreach(Track trk in tracks.Where(t => t.Type != TrackType.Audio))
@@ -743,7 +687,6 @@ sealed partial class Dump
continue;
}
_dumpLog.WriteLine(Localization.Core.Checking_mode_for_track_0, trk.Sequence);
UpdateStatus?.Invoke(string.Format(Localization.Core.Checking_mode_for_track_0, trk.Sequence));
sense = _dev.ReadCd(out cmdBuf,
@@ -765,8 +708,6 @@ sealed partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Unable_to_guess_mode_for_track_0_continuing, trk.Sequence);
UpdateStatus?.Invoke(string.Format(Localization.Core.Unable_to_guess_mode_for_track_0_continuing,
trk.Sequence));
@@ -798,7 +739,6 @@ sealed partial class Dump
case 1:
case 0x61: // Scrambled
UpdateStatus?.Invoke(string.Format(Localization.Core.Track_0_is_MODE1, trk.Sequence));
_dumpLog.WriteLine(Localization.Core.Track_0_is_MODE1, trk.Sequence);
trk.Type = TrackType.CdMode1;
break;
@@ -807,7 +747,6 @@ sealed partial class Dump
if(dskType is MediaType.CDI or MediaType.CDIREADY)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Track_0_is_MODE2, trk.Sequence));
_dumpLog.WriteLine(Localization.Core.Track_0_is_MODE2, trk.Sequence);
trk.Type = TrackType.CdMode2Formless;
break;
@@ -816,14 +755,12 @@ sealed partial class Dump
if((cmdBuf[0x012] & 0x20) == 0x20) // mode 2 form 2
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Track_0_is_MODE2_FORM_2, trk.Sequence));
_dumpLog.WriteLine(Localization.Core.Track_0_is_MODE2_FORM_2, trk.Sequence);
trk.Type = TrackType.CdMode2Form2;
break;
}
UpdateStatus?.Invoke(string.Format(Localization.Core.Track_0_is_MODE2_FORM_1, trk.Sequence));
_dumpLog.WriteLine(Localization.Core.Track_0_is_MODE2_FORM_1, trk.Sequence);
trk.Type = TrackType.CdMode2Form1;
// These media type specifications do not legally allow mode 2 tracks to be present
@@ -835,7 +772,6 @@ sealed partial class Dump
trk.Sequence,
cmdBuf[15]));
_dumpLog.WriteLine(Localization.Core.Track_0_is_unknown_mode_1, trk.Sequence, cmdBuf[15]);
break;
}
@@ -848,7 +784,6 @@ sealed partial class Dump
StoppingErrorMessage?.Invoke(Localization.Core
.Output_format_does_not_support_more_than_1_track_not_continuing);
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_more_than_1_track_not_continuing);
return;
}
@@ -858,7 +793,6 @@ sealed partial class Dump
StoppingErrorMessage?.Invoke(Localization.Core
.Output_format_does_not_support_audio_tracks_not_continuing);
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_audio_tracks_not_continuing);
return;
}
@@ -868,7 +802,6 @@ sealed partial class Dump
StoppingErrorMessage?.Invoke(Localization.Core
.Output_format_only_supports_MODE_1_tracks_not_continuing);
_dumpLog.WriteLine(Localization.Core.Output_format_only_supports_MODE_1_tracks_not_continuing);
return;
}
@@ -883,17 +816,11 @@ sealed partial class Dump
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core
.Output_format_does_not_support_CD_first_track_pregap_continuing);
ErrorMessage?.Invoke(Localization.Core
.Output_format_does_not_support_CD_first_track_pregap_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core
.Output_format_does_not_support_CD_first_track_pregap_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Output_format_does_not_support_CD_first_track_pregap_not_continuing);
@@ -995,8 +922,6 @@ sealed partial class Dump
if(_dev.Error || sense)
{
_dumpLog.WriteLine(Localization.Core.Device_error_0_trying_to_guess_ideal_transfer_length, _dev.LastError);
StoppingErrorMessage?.Invoke(string.Format(Localization.Core
.Device_error_0_trying_to_guess_ideal_transfer_length,
_dev.LastError));
@@ -1014,13 +939,6 @@ sealed partial class Dump
if(_dumpFirstTrackPregap && readcd)
ReadCdFirstTrackPregap(blockSize, ref currentSpeed, mediaTags, supportedSubchannel, ref totalDuration);
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, _maximumReadable);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_blocks_1_bytes, blocks, blocks * blockSize);
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_at_a_time, _maximumReadable);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_logical_block, blockSize);
_dumpLog.WriteLine(Localization.Core.SCSI_device_type_0, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.Media_identified_as_0, dskType);
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, _maximumReadable));
UpdateStatus?.Invoke(string.Format(Localization.Core.Device_reports_0_blocks_1_bytes,
@@ -1041,8 +959,8 @@ sealed partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputOptical.ErrorMessage);
AaruLogging.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
AaruLogging.WriteLine(outputOptical.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
@@ -1080,8 +998,8 @@ sealed partial class Dump
if(!ret && desiredSubchannel == MmcSubchannel.None)
{
_dumpLog.WriteLine(Localization.Core.Error_sending_tracks_to_output_image_not_continuing);
_dumpLog.WriteLine(outputOptical.ErrorMessage);
AaruLogging.WriteLine(Localization.Core.Error_sending_tracks_to_output_image_not_continuing);
AaruLogging.WriteLine(outputOptical.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_sending_tracks_to_output_image_not_continuing +
Environment.NewLine +
@@ -1095,14 +1013,9 @@ sealed partial class Dump
!outputOptical.OpticalCapabilities.HasFlag(OpticalImageCapabilities.CanStoreSubchannelRw))
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_subchannels_continuing);
ErrorMessage?.Invoke(Localization.Core.Output_format_does_not_support_subchannels_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core.Output_format_does_not_support_subchannels_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Output_format_does_not_support_subchannels_not_continuing);
@@ -1112,8 +1025,8 @@ sealed partial class Dump
if(supportedSubchannel != MmcSubchannel.None)
{
_dumpLog.WriteLine(string.Format(Localization.Core.Creating_subchannel_log_in_0,
_outputPrefix + ".sub.log"));
AaruLogging.WriteLine(string.Format(Localization.Core.Creating_subchannel_log_in_0,
_outputPrefix + ".sub.log"));
subLog = new SubchannelLog(_outputPrefix + ".sub.log", bcdSubchannel);
}
@@ -1125,7 +1038,6 @@ sealed partial class Dump
if(track is null) continue;
_dumpLog.WriteLine(Localization.Core.Setting_flags_for_track_0, track.Sequence);
UpdateStatus?.Invoke(string.Format(Localization.Core.Setting_flags_for_track_0, track.Sequence));
outputOptical.WriteSectorTag([kvp.Value], kvp.Key, SectorTagType.CdTrackFlags);
@@ -1137,10 +1049,7 @@ sealed partial class Dump
sense = _dev.ReadMcn(out mcn, out _, out _, _dev.Timeout, out _);
if(!sense && mcn != null && mcn != "0000000000000")
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_Media_Catalogue_Number_0, mcn));
_dumpLog.WriteLine(Localization.Core.Found_Media_Catalogue_Number_0, mcn);
}
else
mcn = null;
}
@@ -1157,7 +1066,6 @@ sealed partial class Dump
isrcs[(byte)trk.Sequence] = isrc;
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_ISRC_for_track_0_1, trk.Sequence, isrc));
_dumpLog.WriteLine(string.Format(Localization.Core.Found_ISRC_for_track_0_1, trk.Sequence, isrc));
}
}
@@ -1170,16 +1078,12 @@ sealed partial class Dump
foreach(int sub in _resume.BadSubchannels) subchannelExtents.Add(sub);
if(_resume.NextBlock < blocks)
{
for(ulong i = _resume.NextBlock; i < blocks; i++) subchannelExtents.Add((int)i);
}
for(ulong i = _resume.NextBlock; i < blocks; i++)
subchannelExtents.Add((int)i);
}
if(_resume.NextBlock > 0)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Resuming_from_block_0, _resume.NextBlock));
_dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
}
if(_skip < _maximumReadable) _skip = _maximumReadable;
@@ -1199,7 +1103,6 @@ sealed partial class Dump
if(tracks.All(t => t.Type != TrackType.Audio))
{
// No audio tracks so no need to fix offset
_dumpLog.WriteLine(Localization.Core.No_audio_tracks_disabling_offset_fix);
UpdateStatus.Invoke(Localization.Core.No_audio_tracks_disabling_offset_fix);
_fixOffset = false;
@@ -1207,9 +1110,6 @@ sealed partial class Dump
if(!readcd)
{
_dumpLog.WriteLine(Localization.Core
.READ_CD_command_is_not_supported_disabling_offset_fix_Dump_may_not_be_correct);
UpdateStatus?.Invoke(Localization.Core
.READ_CD_command_is_not_supported_disabling_offset_fix_Dump_may_not_be_correct);
@@ -1218,9 +1118,6 @@ sealed partial class Dump
}
else if(tracks.Any(t => t.Type == TrackType.Audio))
{
_dumpLog.WriteLine(Localization.Core
.There_are_audio_tracks_and_offset_fixing_is_disabled_dump_may_not_be_correct);
UpdateStatus?.Invoke(Localization.Core
.There_are_audio_tracks_and_offset_fixing_is_disabled_dump_may_not_be_correct);
}
@@ -1236,7 +1133,6 @@ sealed partial class Dump
_debug,
_dev,
dskType,
_dumpLog,
tracks,
UpdateStatus,
out int? driveOffset,
@@ -1247,31 +1143,20 @@ sealed partial class Dump
{
if(driveOffset is null)
{
_dumpLog.WriteLine(Localization.Core.Drive_reading_offset_not_found_in_database);
UpdateStatus?.Invoke(Localization.Core.Drive_reading_offset_not_found_in_database);
_dumpLog.WriteLine(Localization.Core.Disc_offset_cannot_be_calculated);
UpdateStatus?.Invoke(Localization.Core.Disc_offset_cannot_be_calculated);
if(tracks.Any(t => t.Type == TrackType.Audio))
{
_dumpLog.WriteLine(Localization.Core.Dump_may_not_be_correct);
UpdateStatus?.Invoke(Localization.Core.Dump_may_not_be_correct);
}
if(_fixOffset) _fixOffset = false;
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Drive_reading_offset_is_0_bytes_1_samples,
driveOffset,
driveOffset / 4));
UpdateStatus?.Invoke(string.Format(Localization.Core.Drive_reading_offset_is_0_bytes_1_samples,
driveOffset,
driveOffset / 4));
_dumpLog.WriteLine(Localization.Core.Disc_write_offset_is_unknown_dump_may_not_be_correct);
UpdateStatus?.Invoke(Localization.Core.Disc_write_offset_is_unknown_dump_may_not_be_correct);
offsetBytes = driveOffset.Value;
@@ -1294,13 +1179,8 @@ sealed partial class Dump
if(driveOffset is null)
{
_dumpLog.WriteLine(Localization.Core.Drive_reading_offset_not_found_in_database);
UpdateStatus?.Invoke(Localization.Core.Drive_reading_offset_not_found_in_database);
_dumpLog.WriteLine(string.Format(Localization.Core.Combined_disc_and_drive_offset_are_0_bytes_1_samples,
offsetBytes,
offsetBytes / 4));
UpdateStatus?.Invoke(string.Format(Localization.Core
.Combined_disc_and_drive_offset_are_0_bytes_1_samples,
offsetBytes,
@@ -1308,19 +1188,12 @@ sealed partial class Dump
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Drive_reading_offset_is_0_bytes_1_samples,
driveOffset,
driveOffset / 4));
UpdateStatus?.Invoke(string.Format(Localization.Core.Drive_reading_offset_is_0_bytes_1_samples,
driveOffset,
driveOffset / 4));
discOffset = offsetBytes - driveOffset;
_dumpLog.WriteLine(string.Format(Localization.Core.Disc_offset_is_0_bytes_1_samples,
discOffset,
discOffset / 4));
UpdateStatus?.Invoke(string.Format(Localization.Core.Disc_offset_is_0_bytes_1_samples,
discOffset,
@@ -1364,10 +1237,6 @@ sealed partial class Dump
// Set speed
if(_speedMultiplier >= 0)
{
_dumpLog.WriteLine(_speed == 0xFFFF
? Localization.Core.Setting_speed_to_MAX_for_data_reading
: string.Format(Localization.Core.Setting_speed_to_0_x_for_data_reading, _speed));
UpdateStatus?.Invoke(_speed == 0xFFFF
? Localization.Core.Setting_speed_to_MAX_for_data_reading
: string.Format(Localization.Core.Setting_speed_to_0_x_for_data_reading, _speed));
@@ -1390,9 +1259,6 @@ sealed partial class Dump
if(!supportsLongSectors)
{
_dumpLog.WriteLine(Localization.Core
.Dumping_CD_i_Ready_requires_the_output_image_format_to_support_long_sectors);
StoppingErrorMessage?.Invoke(Localization.Core
.Dumping_CD_i_Ready_requires_the_output_image_format_to_support_long_sectors);
@@ -1401,9 +1267,6 @@ sealed partial class Dump
if(!readcd)
{
_dumpLog.WriteLine(Localization.Core
.Dumping_CD_i_Ready_requires_the_drive_to_support_the_READ_CD_command);
StoppingErrorMessage?.Invoke(Localization.Core
.Dumping_CD_i_Ready_requires_the_drive_to_support_the_READ_CD_command);
@@ -1442,9 +1305,6 @@ sealed partial class Dump
if(offsetBytes % sectorSize != 0) sectorsForOffset++;
_dumpLog.WriteLine(Localization.Core
.Enabling_skipping_CD_i_Ready_hole_because_drive_returns_data_as_audio);
UpdateStatus?.Invoke(Localization.Core
.Enabling_skipping_CD_i_Ready_hole_because_drive_returns_data_as_audio);
@@ -1452,13 +1312,8 @@ sealed partial class Dump
if(driveOffset is null)
{
_dumpLog.WriteLine(Localization.Core.Drive_reading_offset_not_found_in_database);
UpdateStatus?.Invoke(Localization.Core.Drive_reading_offset_not_found_in_database);
_dumpLog.WriteLine(string.Format(Localization.Core
.Combined_disc_and_drive_offset_are_0_bytes_1_samples,
offsetBytes,
offsetBytes / 4));
UpdateStatus?.Invoke(string.Format(Localization.Core
.Combined_disc_and_drive_offset_are_0_bytes_1_samples,
@@ -1467,19 +1322,12 @@ sealed partial class Dump
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Drive_reading_offset_is_0_bytes_1_samples,
driveOffset,
driveOffset / 4));
UpdateStatus?.Invoke(string.Format(Localization.Core.Drive_reading_offset_is_0_bytes_1_samples,
driveOffset,
driveOffset / 4));
discOffset = offsetBytes - driveOffset;
_dumpLog.WriteLine(string.Format(Localization.Core.Disc_offset_is_0_bytes_1_samples,
discOffset,
discOffset / 4));
UpdateStatus?.Invoke(string.Format(Localization.Core.Disc_offset_is_0_bytes_1_samples,
discOffset,
@@ -1490,9 +1338,6 @@ sealed partial class Dump
if(!_skipCdireadyHole)
{
_dumpLog.WriteLine(Localization.Core
.There_will_be_thousand_of_errors_between_track_0_and_track_1_that_is_normal_and_you_can_ignore_them);
UpdateStatus?.Invoke(Localization.Core
.There_will_be_thousand_of_errors_between_track_0_and_track_1_that_is_normal_and_you_can_ignore_them);
}
@@ -1592,18 +1437,6 @@ sealed partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
TrimCdUserData(audioExtents,
blockSize,
@@ -1661,9 +1494,8 @@ sealed partial class Dump
supportsLongSectors);
foreach(Tuple<ulong, ulong> leadoutExtent in leadOutExtents.ToArray())
{
for(ulong e = leadoutExtent.Item1; e <= leadoutExtent.Item2; e++) subchannelExtents.Remove((int)e);
}
for(ulong e = leadoutExtent.Item1; e <= leadoutExtent.Item2; e++)
subchannelExtents.Remove((int)e);
if(subchannelExtents.Count > 0 && _retryPasses > 0 && _retrySubchannel)
{
@@ -1697,7 +1529,6 @@ sealed partial class Dump
if(ret || _force) continue;
// Cannot write tag to image
_dumpLog.WriteLine(string.Format(Localization.Core.Cannot_write_tag_0, tag.Key));
StoppingErrorMessage?.Invoke(outputOptical.ErrorMessage);
return;
@@ -1706,7 +1537,8 @@ sealed partial class Dump
_resume.BadBlocks.Sort();
foreach(ulong bad in _resume.BadBlocks) _dumpLog.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
foreach(ulong bad in _resume.BadBlocks)
AaruLogging.Information(Localization.Core.Sector_0_could_not_be_read, bad);
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
@@ -1723,7 +1555,6 @@ sealed partial class Dump
trackFlags,
blocks,
subLog,
_dumpLog,
InitProgress,
UpdateProgress,
EndProgress,
@@ -1755,14 +1586,10 @@ sealed partial class Dump
continue;
UpdateStatus?.Invoke(string.Format(Localization.Core.Setting_ISRC_for_track_0_to_1, isrc.Key, isrc.Value));
_dumpLog.WriteLine(Localization.Core.Setting_ISRC_for_track_0_to_1, isrc.Key, isrc.Value);
}
if(mcn != null && outputOptical.WriteMediaTag(Encoding.ASCII.GetBytes(mcn), MediaTagType.CD_MCN))
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Setting_disc_Media_Catalogue_Number_to_0, mcn));
_dumpLog.WriteLine(Localization.Core.Setting_disc_Media_Catalogue_Number_to_0, mcn);
}
foreach(Track trk in tracks)
{
@@ -1783,7 +1610,6 @@ sealed partial class Dump
outputOptical.SetTracks(tracks.ToList());
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputOptical.Close();
@@ -1796,7 +1622,7 @@ sealed partial class Dump
if(_aborted)
{
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
return;
}

View File

@@ -197,7 +197,6 @@ partial class Dump
md10 = Modes.EncodeMode10(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
sense = _dev.ModeSelect(md6, out senseBuf, true, false, _dev.Timeout, out _);
if(sense) sense = _dev.ModeSelect10(md10, out senseBuf, true, false, _dev.Timeout, out _);
@@ -208,9 +207,6 @@ partial class Dump
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
AaruLogging.Debug(Localization.Core.Error_0, Sense.PrettifySense(senseBuf));
_dumpLog.WriteLine(Localization.Core
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
}
else
runningPersistent = true;
@@ -228,7 +224,7 @@ partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -469,8 +465,9 @@ 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
@@ -499,7 +496,6 @@ partial class Dump
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_sector_0_in_pass_1, badSector, pass);
sectorsNotEvenPartial.Remove(badSector);
}
else
@@ -532,7 +528,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -600,7 +595,7 @@ partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
md10 = Modes.EncodeMode10(md, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_ignore_error_correction);
AaruLogging.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_ignore_error_correction);
sense = _dev.ModeSelect(md6, out senseBuf, true, false, _dev.Timeout, out _);
if(sense) sense = _dev.ModeSelect10(md10, out senseBuf, true, false, _dev.Timeout, out _);
@@ -618,7 +613,7 @@ partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -657,7 +652,7 @@ partial class Dump
continue;
}
_dumpLog.WriteLine(Localization.Core.Got_partial_data_for_sector_0_in_pass_1, badSector, pass);
AaruLogging.WriteLine(Localization.Core.Got_partial_data_for_sector_0_in_pass_1, badSector, pass);
if(supportedSubchannel != MmcSubchannel.None)
{
@@ -686,7 +681,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -722,7 +716,7 @@ partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
md10 = Modes.EncodeMode10(md, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
AaruLogging.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
sense = _dev.ModeSelect(md6, out senseBuf, true, false, _dev.Timeout, out _);
if(sense) _dev.ModeSelect10(md10, out senseBuf, true, false, _dev.Timeout, out _);
@@ -790,7 +784,7 @@ partial class Dump
if(_aborted)
{
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -862,7 +856,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -873,8 +866,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_sector_0_subchannel_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_sector_0_subchannel_in_pass_1, badSector, pass);
}
if(pass < _retryPasses && !_aborted && subchannelExtents.Count > 0)

View File

@@ -44,6 +44,7 @@ using Aaru.CommonTypes.Extents;
using Aaru.CommonTypes.Interfaces;
using Aaru.Core.Logging;
using Aaru.Devices;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using Track = Aaru.CommonTypes.Structs.Track;
@@ -91,12 +92,11 @@ partial class Dump
{
byte[] cmdBuf = null; // Data buffer
const uint sectorSize = 2352; // Full sector size
var sense = true; // Sense indicator
bool sense = true; // Sense indicator
byte[] senseBuf = null;
var outputOptical = _outputPlugin as IWritableOpticalImage;
UpdateStatus?.Invoke(Localization.Core.Reading_lead_outs);
_dumpLog.WriteLine(Localization.Core.Reading_lead_outs);
InitProgress?.Invoke();
@@ -107,7 +107,7 @@ partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -205,10 +205,10 @@ partial class Dump
if(supportedSubchannel != MmcSubchannel.None)
{
var data = new byte[sectorSize * _maximumReadable];
var sub = new byte[subSize * _maximumReadable];
byte[] data = new byte[sectorSize * _maximumReadable];
byte[] sub = new byte[subSize * _maximumReadable];
for(var b = 0; b < _maximumReadable; b++)
for(int b = 0; b < _maximumReadable; b++)
{
Array.Copy(cmdBuf, (int)(0 + b * blockSize), data, sectorSize * b, sectorSize);
@@ -232,7 +232,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -332,11 +331,11 @@ partial class Dump
{
byte[] cmdBuf = null; // Data buffer
const uint sectorSize = 2352; // Full sector size
var sense = true; // Sense indicator
bool sense = true; // Sense indicator
byte[] senseBuf = null;
var outputOptical = _outputPlugin as IWritableOpticalImage;
_dumpLog.WriteLine("Retrying lead-outs");
AaruLogging.WriteLine("Retrying lead-outs");
InitProgress?.Invoke();
@@ -347,7 +346,7 @@ partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -445,10 +444,10 @@ partial class Dump
if(supportedSubchannel != MmcSubchannel.None)
{
var data = new byte[sectorSize * _maximumReadable];
var sub = new byte[subSize * _maximumReadable];
byte[] data = new byte[sectorSize * _maximumReadable];
byte[] sub = new byte[subSize * _maximumReadable];
for(var b = 0; b < _maximumReadable; b++)
for(int b = 0; b < _maximumReadable; b++)
{
Array.Copy(cmdBuf, (int)(0 + b * blockSize), data, sectorSize * b, sectorSize);
@@ -472,7 +471,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,

View File

@@ -42,7 +42,6 @@ using Aaru.Checksums;
using Aaru.CommonTypes;
using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Structs;
using Aaru.Core.Logging;
using Aaru.Devices;
using Aaru.Logging;
using Humanizer;
@@ -70,7 +69,6 @@ partial class Dump
int firstTrackPregapSectorsGood = 0;
var firstTrackPregapMs = new MemoryStream();
_dumpLog.WriteLine(Localization.Core.Reading_first_track_pregap);
UpdateStatus?.Invoke(Localization.Core.Reading_first_track_pregap);
InitProgress?.Invoke();
_speedStopwatch.Restart();
@@ -81,7 +79,6 @@ partial class Dump
{
if(_aborted)
{
_dumpLog.WriteLine(Localization.Core.Aborted);
UpdateStatus?.Invoke(Localization.Core.Aborted);
break;
@@ -145,8 +142,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Got_0_first_track_pregap_sectors,
firstTrackPregapSectorsGood));
_dumpLog.WriteLine(Localization.Core.Got_0_first_track_pregap_sectors, firstTrackPregapSectorsGood);
firstTrackPregapMs.Close();
}
@@ -160,8 +155,8 @@ partial class Dump
/// <param name="dbDev">Database entry for device</param>
/// <param name="inexactPositioning">Set if we found the drive does not return the exact subchannel we requested</param>
/// <param name="dumping">Set if dumping, otherwise media info</param>
public static void SolveTrackPregaps(Device dev, DumpLog dumpLog, UpdateStatusHandler updateStatus, Track[] tracks,
bool supportsPqSubchannel, bool supportsRwSubchannel,
public static void SolveTrackPregaps(Device dev, UpdateStatusHandler updateStatus, Track[] tracks,
bool supportsPqSubchannel, bool supportsRwSubchannel,
Database.Models.Device dbDev, out bool inexactPositioning, bool dumping)
{
bool sense = true; // Sense indicator
@@ -190,18 +185,15 @@ partial class Dump
}
AaruLogging.Debug(PREGAP_MODULE_NAME,
bcd switch
{
true => Localization.Core.Subchannel_is_BCD,
false => Localization.Core.Subchannel_is_not_BCD,
_ => Localization.Core.Could_not_detect_drive_subchannel_BCD
});
bcd switch
{
true => Localization.Core.Subchannel_is_BCD,
false => Localization.Core.Subchannel_is_not_BCD,
_ => Localization.Core.Could_not_detect_drive_subchannel_BCD
});
if(bcd is null)
{
dumpLog?.WriteLine(Localization.Core
.Could_not_detect_if_drive_subchannel_is_BCD_or_not_pregaps_could_not_be_calculated_dump_may_be_incorrect);
updateStatus?.Invoke(Localization.Core
.Could_not_detect_if_drive_subchannel_is_BCD_or_not_pregaps_could_not_be_calculated_dump_may_be_incorrect);
@@ -236,8 +228,8 @@ partial class Dump
if(dumping && dev.Manufacturer.ToLowerInvariant().StartsWith("plextor", StringComparison.Ordinal))
{
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core.Skipping_track_0_due_to_Plextor_firmware_bug,
track.Sequence);
Localization.Core.Skipping_track_0_due_to_Plextor_firmware_bug,
track.Sequence);
continue;
}
@@ -264,10 +256,10 @@ partial class Dump
if(sense)
{
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core.LBA_0_Try_1_Sense_2,
lba,
retries + 1,
sense);
Localization.Core.LBA_0_Try_1_Sense_2,
lba,
retries + 1,
sense);
continue;
}
@@ -277,25 +269,25 @@ partial class Dump
CRC16CcittContext.Data(subBuf, 10, out crc);
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core
.LBA_0_Try_1_Sense_2_Q_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
Localization.Core
.LBA_0_Try_1_Sense_2_Q_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
crcOk = crc[0] == subBuf[10] && crc[1] == subBuf[11];
@@ -330,25 +322,25 @@ partial class Dump
if(crcOk)
{
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core
.LBA_0_Try_1_Sense_2_Q_FIXED_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
Localization.Core
.LBA_0_Try_1_Sense_2_Q_FIXED_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
}
else
continue;
@@ -404,25 +396,25 @@ partial class Dump
CRC16CcittContext.Data(subBuf, 10, out crc);
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core
.LBA_0_Try_1_Sense_2_Q_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
Localization.Core
.LBA_0_Try_1_Sense_2_Q_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
crcOk = crc[0] == subBuf[10] && crc[1] == subBuf[11];
@@ -457,25 +449,25 @@ partial class Dump
if(crcOk)
{
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core
.LBA_0_Try_1_Sense_2_Q_FIXED_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
Localization.Core
.LBA_0_Try_1_Sense_2_Q_FIXED_3_4_5_6_7_8_9_10_11_12_CRC_13_14_Calculated_CRC_15_16,
lba,
retries + 1,
sense,
subBuf[0],
subBuf[1],
subBuf[2],
subBuf[3],
subBuf[4],
subBuf[5],
subBuf[6],
subBuf[7],
subBuf[8],
subBuf[9],
subBuf[10],
subBuf[11],
crc[0],
crc[1]);
break;
}
@@ -497,27 +489,17 @@ partial class Dump
if(previousTrack.Type == TrackType.Audio && track.Type != TrackType.Audio ||
previousTrack.Type != TrackType.Audio && track.Type == TrackType.Audio)
{
dumpLog?.WriteLine(Localization.Core
.Could_not_read_subchannel_for_this_track_supposing_hundred_fifty_sectors);
updateStatus?.Invoke(Localization.Core
.Could_not_read_subchannel_for_this_track_supposing_hundred_fifty_sectors);
}
else
{
dumpLog?.WriteLine(Localization.Core
.Could_not_read_subchannel_for_this_track_supposing_zero_sectors);
updateStatus?.Invoke(Localization.Core
.Could_not_read_subchannel_for_this_track_supposing_zero_sectors);
}
}
else
{
dumpLog?.WriteLine(string.Format(Localization.Core
.Could_not_read_subchannel_for_this_track_supposing_0_sectors,
pregaps[track.Sequence]));
updateStatus?.Invoke(string.Format(Localization.Core
.Could_not_read_subchannel_for_this_track_supposing_0_sectors,
pregaps[track.Sequence]));
@@ -526,9 +508,6 @@ partial class Dump
break;
}
dumpLog?.WriteLine(string.Format(Localization.Core.Could_not_read_subchannel_for_sector_0,
lba));
updateStatus?.Invoke(string.Format(Localization.Core.Could_not_read_subchannel_for_sector_0,
lba));
@@ -538,9 +517,6 @@ partial class Dump
continue;
}
dumpLog?.WriteLine(string.Format(Localization.Core.Could_not_get_correct_subchannel_for_sector_0,
lba));
updateStatus?.Invoke(string.Format(Localization.Core.Could_not_get_correct_subchannel_for_sector_0,
lba));
}
@@ -612,9 +588,9 @@ partial class Dump
if(diff != 0)
{
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core.Invalid_Q_position_for_LBA_0_got_1,
lba,
posQ);
Localization.Core.Invalid_Q_position_for_LBA_0_got_1,
lba,
posQ);
inexactPositioning = true;
}
@@ -636,9 +612,9 @@ partial class Dump
if(crcOk || pregapQ - pregaps[track.Sequence] < 10)
{
AaruLogging.Debug(PREGAP_MODULE_NAME,
Localization.Core.Pregap_for_track_0_1,
track.Sequence,
pregapQ);
Localization.Core.Pregap_for_track_0_1,
track.Sequence,
pregapQ);
pregaps[track.Sequence] = pregapQ;
}
@@ -680,8 +656,6 @@ partial class Dump
trk.StartSector -= trk.Pregap;
#if DEBUG
dumpLog?.WriteLine(string.Format(Localization.Core.Track_0_pregap_is_1_sectors, trk.Sequence, trk.Pregap));
updateStatus?.Invoke(string.Format(Localization.Core.Track_0_pregap_is_1_sectors,
trk.Sequence,
trk.Pregap));

View File

@@ -63,9 +63,6 @@ partial class Dump
if(runOutSectors.Count == 0) return;
_dumpLog.WriteLine(string.Format(Localization.Core._0_sectors_at_the_end_of_the_disc_are_unreadable,
runOutSectors.Count));
UpdateStatus?.Invoke(string.Format(Localization.Core._0_sectors_at_the_end_of_the_disc_are_unreadable,
runOutSectors.Count));
@@ -75,7 +72,7 @@ partial class Dump
if(track is null) continue;
var sector = new byte[2352];
byte[] sector = new byte[2352];
switch(track.Type)
{

View File

@@ -35,7 +35,6 @@
// ReSharper disable TooWideLocalVariableScope
using Aaru.CommonTypes;
using Aaru.Core.Logging;
using Aaru.Devices;
namespace Aaru.Core.Devices.Dumping;
@@ -48,9 +47,8 @@ partial class Dump
/// <param name="updateStatus">Progress update callback</param>
/// <param name="lba">LBA to try</param>
/// <returns><c>true</c> if read correctly, <c>false</c> otherwise</returns>
public static bool SupportsRwSubchannel(Device dev, DumpLog dumpLog, UpdateStatusHandler updateStatus, uint lba)
public static bool SupportsRwSubchannel(Device dev, UpdateStatusHandler updateStatus, uint lba)
{
dumpLog?.WriteLine(Localization.Core.Checking_if_drive_supports_full_raw_subchannel_reading);
updateStatus?.Invoke(Localization.Core.Checking_if_drive_supports_full_raw_subchannel_reading);
return !dev.ReadCd(out _,
@@ -77,9 +75,8 @@ partial class Dump
/// <param name="updateStatus">Progress update callback</param>
/// <param name="lba">LBA to try</param>
/// <returns><c>true</c> if read correctly, <c>false</c> otherwise</returns>
public static bool SupportsPqSubchannel(Device dev, DumpLog dumpLog, UpdateStatusHandler updateStatus, uint lba)
public static bool SupportsPqSubchannel(Device dev, UpdateStatusHandler updateStatus, uint lba)
{
dumpLog?.WriteLine(Localization.Core.Checking_if_drive_supports_PQ_subchannel_reading);
updateStatus?.Invoke(Localization.Core.Checking_if_drive_supports_PQ_subchannel_reading);
return !dev.ReadCd(out _,

View File

@@ -61,7 +61,6 @@ partial class Dump
firstTrackLastSession = 1;
// ATIP exists on blank CDs
_dumpLog.WriteLine(Localization.Core.Reading_ATIP);
UpdateStatus?.Invoke(Localization.Core.Reading_ATIP);
sense = _dev.ReadAtip(out cmdBuf, out _, _dev.Timeout, out _);
@@ -81,7 +80,6 @@ partial class Dump
}
}
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Information);
UpdateStatus?.Invoke(Localization.Core.Reading_Disc_Information);
sense = _dev.ReadDiscInformation(out cmdBuf,
@@ -105,7 +103,6 @@ partial class Dump
}
}
_dumpLog.WriteLine(Localization.Core.Reading_PMA);
UpdateStatus?.Invoke(Localization.Core.Reading_PMA);
sense = _dev.ReadPma(out cmdBuf, out _, _dev.Timeout, out _);
@@ -117,7 +114,6 @@ partial class Dump
_mediaGraph?.PaintRecordableInformationGood();
}
_dumpLog.WriteLine(Localization.Core.Reading_Session_Information);
UpdateStatus?.Invoke(Localization.Core.Reading_Session_Information);
sense = _dev.ReadSessionInfo(out cmdBuf, out _, _dev.Timeout, out _);
@@ -132,7 +128,6 @@ partial class Dump
}
}
_dumpLog.WriteLine(Localization.Core.Reading_CD_Text_from_Lead_In);
UpdateStatus?.Invoke(Localization.Core.Reading_CD_Text_from_Lead_In);
sense = _dev.ReadCdText(out cmdBuf, out _, _dev.Timeout, out _);

View File

@@ -40,7 +40,6 @@ using System.Linq;
using Aaru.CommonTypes;
using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Structs;
using Aaru.Core.Logging;
using Aaru.Decoders.CD;
using Aaru.Devices;
@@ -60,9 +59,9 @@ partial class Dump
/// <param name="trackFlags">Track flags</param>
/// <param name="updateStatus">Update status handler</param>
/// <returns>List of tracks</returns>
public static Track[] GetCdTracks(Device dev, DumpLog dumpLog, bool force, out long lastSector,
Dictionary<int, long> leadOutStarts, Dictionary<MediaTagType, byte[]> mediaTags,
ErrorMessageHandler stoppingErrorMessage, out FullTOC.CDFullTOC? toc,
public static Track[] GetCdTracks(Device dev, bool force, out long lastSector, Dictionary<int, long> leadOutStarts,
Dictionary<MediaTagType, byte[]> mediaTags,
ErrorMessageHandler stoppingErrorMessage, out FullTOC.CDFullTOC? toc,
Dictionary<byte, byte> trackFlags, UpdateStatusHandler updateStatus)
{
byte[] cmdBuf; // Data buffer
@@ -76,7 +75,6 @@ partial class Dump
// We discarded all discs that falsify a TOC before requesting a real TOC
// No TOC, no CD (or an empty one)
dumpLog?.WriteLine(Localization.Core.Reading_full_TOC);
updateStatus?.Invoke(Localization.Core.Reading_full_TOC);
sense = dev.ReadRawToc(out cmdBuf, out _, 0, dev.Timeout, out _);
@@ -93,7 +91,6 @@ partial class Dump
}
updateStatus?.Invoke(Localization.Core.Building_track_map);
dumpLog?.WriteLine(Localization.Core.Building_track_map);
if(toc.HasValue)
{
@@ -179,16 +176,12 @@ partial class Dump
else
{
updateStatus?.Invoke(Localization.Core.Cannot_read_RAW_TOC_requesting_processed_one);
dumpLog?.WriteLine(Localization.Core.Cannot_read_RAW_TOC_requesting_processed_one);
sense = dev.ReadToc(out cmdBuf, out _, false, 0, dev.Timeout, out _);
TOC.CDTOC? oldToc = TOC.Decode(cmdBuf);
if((sense || !oldToc.HasValue) && !force)
{
dumpLog?.WriteLine(Localization.Core
.Could_not_read_TOC_if_you_want_to_continue_use_force_and_will_try_from_LBA_0_to_360000);
stoppingErrorMessage?.Invoke(Localization.Core
.Could_not_read_TOC_if_you_want_to_continue_use_force_and_will_try_from_LBA_0_to_360000);
@@ -237,7 +230,6 @@ partial class Dump
if(trackList.Count == 0)
{
updateStatus?.Invoke(Localization.Core.No_tracks_found_adding_a_single_track_from_zero_to_Lead_Out);
dumpLog?.WriteLine(Localization.Core.No_tracks_found_adding_a_single_track_from_zero_to_Lead_Out);
trackList.Add(new Track
{
@@ -258,7 +250,7 @@ partial class Dump
if(!sense)
{
var temp = new byte[8];
byte[] temp = new byte[8];
Array.Copy(cmdBuf, 0, temp, 0, 8);
Array.Reverse(temp);
@@ -278,14 +270,12 @@ partial class Dump
stoppingErrorMessage?.Invoke(Localization.Core
.Could_not_find_Lead_Out_if_you_want_to_continue_use_force_option);
dumpLog?.WriteLine(Localization.Core.Could_not_find_Lead_Out_if_you_want_to_continue_use_force_option);
return null;
}
updateStatus?.Invoke(Localization.Core.WARNING_Could_not_find_Lead_Out_start_will_try_to_read_up_to);
dumpLog?.WriteLine(Localization.Core.WARNING_Could_not_find_Lead_Out_start_will_try_to_read_up_to);
lastSector = 360000;
return trackList.ToArray();

View File

@@ -84,7 +84,7 @@ partial class Dump
Dictionary<byte, string> isrcs, ref string mcn, HashSet<int> subchannelExtents,
Dictionary<byte, int> smallestPregapLbaPerTrack)
{
var sense = true; // Sense indicator
bool sense = true; // Sense indicator
byte[] cmdBuf = null; // Data buffer
double cmdDuration = 0; // Command execution time
const uint sectorSize = 2352; // Full sector size
@@ -103,14 +103,13 @@ partial class Dump
if(_resume.BadBlocks.Count <= 0 || _aborted || !_trim || !newTrim) return;
UpdateStatus?.Invoke(Localization.Core.Trimming_skipped_sectors);
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
InitProgress?.Invoke();
_trimStopwatch.Restart();
trimStart:
ulong[] tmpArray = _resume.BadBlocks.ToArray();
for(var b = 0; b < tmpArray.Length; b++)
for(int b = 0; b < tmpArray.Length; b++)
{
ulong badSector = tmpArray[b];
@@ -118,7 +117,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -128,7 +126,7 @@ partial class Dump
Track track = tracks.OrderBy(t => t.StartSector).LastOrDefault(t => badSector >= t.StartSector);
byte sectorsToTrim = 1;
var badSectorToRead = (uint)badSector;
uint badSectorToRead = (uint)badSector;
if(_fixOffset && audioExtents.Contains(badSector) && offsetBytes != 0)
{
@@ -292,7 +290,7 @@ partial class Dump
{
case 0:
for(var c = 16; c < 2352; c++)
for(int c = 16; c < 2352; c++)
{
if(cmdBuf[c] == 0x00) continue;
@@ -419,8 +417,8 @@ partial class Dump
if(supportedSubchannel != MmcSubchannel.None)
{
var data = new byte[sectorSize];
var sub = new byte[subSize];
byte[] data = new byte[sectorSize];
byte[] sub = new byte[subSize];
Array.Copy(cmdBuf, 0, data, 0, sectorSize);
Array.Copy(cmdBuf, sectorSize, sub, 0, subSize);
@@ -446,7 +444,6 @@ partial class Dump
outputOptical,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack,
true,
@@ -480,8 +477,5 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
}

View File

@@ -77,7 +77,6 @@ public partial class Dump
readonly string _devicePath;
readonly uint _dimensions;
readonly bool _doResume;
readonly DumpLog _dumpLog;
readonly bool _dumpRaw;
readonly Stopwatch _dumpStopwatch;
readonly Encoding _encoding;
@@ -128,7 +127,6 @@ public partial class Dump
/// <param name="doResume">Should resume?</param>
/// <param name="dev">Device</param>
/// <param name="devicePath">Path to the device</param>
/// <param name="outputPrefix">Prefix for output log files</param>
/// <param name="outputPlugin">Plugin for output file</param>
/// <param name="retryPasses">How many times to retry</param>
/// <param name="force">Force to continue dump whenever possible</param>
@@ -136,15 +134,15 @@ public partial class Dump
/// <param name="persistent">Store whatever data the drive returned on error</param>
/// <param name="stopOnError">Stop dump on first error</param>
/// <param name="resume">Information for dump resuming</param>
/// <param name="dumpLog">Dump logger</param>
/// <param name="encoding">Encoding to use when analyzing dump</param>
/// <param name="outputPrefix">Prefix for output log files</param>
/// <param name="outputPath">Path to output file</param>
/// <param name="formatOptions">Formats to pass to output file plugin</param>
/// <param name="trim">Trim errors from skipped sectors</param>
/// <param name="dumpFirstTrackPregap">Try to read and dump as much first track pregap as possible</param>
/// <param name="preSidecar">Sidecar to store in dumped image</param>
/// <param name="skip">How many sectors to skip reading on error</param>
/// <param name="metadata">Create metadata sidecar after dump?</param>
/// <param name="trim">Trim errors from skipped sectors</param>
/// <param name="dumpFirstTrackPregap">Try to read and dump as much first track pregap as possible</param>
/// <param name="fixOffset">Fix audio offset</param>
/// <param name="debug">Debug mode</param>
/// <param name="subchannel">Desired subchannel to save to image</param>
@@ -167,14 +165,14 @@ public partial class Dump
/// <param name="ignoreCdrRunOuts">How many CD-R(W) run end sectors to ignore and regenerate</param>
/// <param name="createGraph">If set to <c>true</c> creates a graph of the dump.</param>
/// <param name="dimensions">Dimensions of graph in pixels for a square</param>
public Dump(bool doResume, Device dev, string devicePath, IBaseWritableImage outputPlugin, ushort retryPasses,
bool force, bool dumpRaw, bool persistent, bool stopOnError, Resume resume, DumpLog dumpLog,
Encoding encoding, string outputPrefix, string outputPath, Dictionary<string, string> formatOptions,
Metadata preSidecar, uint skip, bool metadata, bool trim, bool dumpFirstTrackPregap, bool fixOffset,
bool debug, DumpSubchannel subchannel, int speed, bool @private, bool fixSubchannelPosition,
bool retrySubchannel, bool fixSubchannel, bool fixSubchannelCrc, bool skipCdireadyHole,
ErrorLog errorLog, bool generateSubchannels, uint maximumReadable, bool useBufferedReads,
bool storeEncrypted, bool titleKeys, uint ignoreCdrRunOuts, bool createGraph, uint dimensions)
public Dump(bool doResume, Device dev, string devicePath, IBaseWritableImage outputPlugin, ushort retryPasses,
bool force, bool dumpRaw, bool persistent, bool stopOnError, Resume resume, Encoding encoding,
string outputPrefix, string outputPath, Dictionary<string, string> formatOptions, Metadata preSidecar,
uint skip, bool metadata, bool trim, bool dumpFirstTrackPregap, bool fixOffset, bool debug,
DumpSubchannel subchannel, int speed, bool @private, bool fixSubchannelPosition, bool retrySubchannel,
bool fixSubchannel, bool fixSubchannelCrc, bool skipCdireadyHole, ErrorLog errorLog,
bool generateSubchannels, uint maximumReadable, bool useBufferedReads, bool storeEncrypted,
bool titleKeys, uint ignoreCdrRunOuts, bool createGraph, uint dimensions)
{
_doResume = doResume;
_dev = dev;
@@ -186,7 +184,6 @@ public partial class Dump
_persistent = persistent;
_stopOnError = stopOnError;
_resume = resume;
_dumpLog = dumpLog;
_encoding = encoding;
_outputPrefix = outputPrefix;
_outputPath = outputPath;
@@ -237,14 +234,9 @@ public partial class Dump
d.Revision == _dev.FirmwareRevision);
if(_dbDev is null)
{
_dumpLog.WriteLine(Localization.Core.Device_not_in_database);
UpdateStatus?.Invoke(Localization.Core.Device_not_in_database);
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Device_in_database_since_0, _dbDev.LastSynchronized));
UpdateStatus?.Invoke(string.Format(Localization.Core.Device_in_database_since_0, _dbDev.LastSynchronized));
if(_dbDev.OptimalMultipleSectorsRead > 0) _maximumReadable = (uint)_dbDev.OptimalMultipleSectorsRead;
@@ -282,8 +274,6 @@ public partial class Dump
break;
default:
_dumpLog.WriteLine(Localization.Core.Unknown_device_type);
_dumpLog.Close();
StoppingErrorMessage?.Invoke(Localization.Core.Unknown_device_type);
return;
@@ -293,7 +283,6 @@ public partial class Dump
}
_errorLog.Close();
_dumpLog.Close();
if(_resume == null || !_doResume) return;

View File

@@ -36,6 +36,7 @@ using Aaru.CommonTypes;
using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Interfaces;
using Aaru.Core.Graphics;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using Humanizer.Localisation;
@@ -72,52 +73,48 @@ public partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_read);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
return;
}
var tmp = new byte[8];
byte[] tmp = new byte[8];
Array.Copy(buffer, 0x36, tmp, 0, 8);
// UMDs are stored inside a FAT16 volume
if(!tmp.SequenceEqual(_fatSignature))
{
_dumpLog.WriteLine(Localization.Core.Retrode_partition_not_recognized_not_dumping);
StoppingErrorMessage?.Invoke(Localization.Core.Retrode_partition_not_recognized_not_dumping);
return;
}
var fatStart = (ushort)((buffer[0x0F] << 8) + buffer[0x0E]);
var sectorsPerFat = (ushort)((buffer[0x17] << 8) + buffer[0x16]);
var rootStart = (ushort)(sectorsPerFat * 2 + fatStart);
var rootSize = (ushort)(((buffer[0x12] << 8) + buffer[0x11]) * 32 / 512);
byte sectorsPerCluster = buffer[0x0D];
ushort fatStart = (ushort)((buffer[0x0F] << 8) + buffer[0x0E]);
ushort sectorsPerFat = (ushort)((buffer[0x17] << 8) + buffer[0x16]);
ushort rootStart = (ushort)(sectorsPerFat * 2 + fatStart);
ushort rootSize = (ushort)(((buffer[0x12] << 8) + buffer[0x11]) * 32 / 512);
byte sectorsPerCluster = buffer[0x0D];
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_root_directory_in_sector_0, rootStart));
_dumpLog.WriteLine(Localization.Core.Reading_root_directory_in_sector_0, rootStart);
sense = _dev.Read10(out buffer, out _, 0, false, true, false, false, rootStart, 512, 0, 1, _dev.Timeout, out _);
if(sense)
{
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
_dumpLog.WriteLine(Localization.Core.Could_not_read);
return;
}
int romPos;
var sfcFound = false;
var genesisFound = false;
var smsFound = false;
var n64Found = false;
var gbFound = false;
var gbcFound = false;
var gbaFound = false;
int romPos;
bool sfcFound = false;
bool genesisFound = false;
bool smsFound = false;
bool n64Found = false;
bool gbFound = false;
bool gbcFound = false;
bool gbaFound = false;
tmp = new byte[3];
for(romPos = 0; romPos < buffer.Length; romPos += 0x20)
@@ -176,13 +173,12 @@ public partial class Dump
if(!sfcFound && !genesisFound && !smsFound && !n64Found && !gbaFound && !gbFound && !gbcFound)
{
StoppingErrorMessage?.Invoke(Localization.Core.No_cartridge_found_not_dumping);
_dumpLog.WriteLine(Localization.Core.No_cartridge_found_not_dumping);
return;
}
var cluster = BitConverter.ToUInt16(buffer, romPos + 0x1A);
var romSize = BitConverter.ToUInt32(buffer, romPos + 0x1C);
ushort cluster = BitConverter.ToUInt16(buffer, romPos + 0x1A);
uint romSize = BitConverter.ToUInt32(buffer, romPos + 0x1C);
MediaType mediaType = gbaFound
? MediaType.GameBoyAdvanceGamePak
@@ -205,8 +201,6 @@ public partial class Dump
if(_outputPlugin is not IByteAddressableImage outputBai || !outputBai.SupportedMediaTypes.Contains(mediaType))
{
_dumpLog.WriteLine(Localization.Core.The_specified_format_does_not_support_the_inserted_cartridge);
StoppingErrorMessage?.Invoke(Localization.Core
.The_specified_format_does_not_support_the_inserted_cartridge);
@@ -229,13 +223,12 @@ public partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_read);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
return;
}
var startSector = (uint)(rootStart + rootSize + (cluster - 2) * sectorsPerCluster);
uint startSector = (uint)(rootStart + rootSize + (cluster - 2) * sectorsPerCluster);
uint romSectors = romSize / 512;
uint romRemaining = romSize % 512;
@@ -266,16 +259,12 @@ public partial class Dump
}
UpdateStatus?.Invoke(string.Format(Localization.Core.Media_identified_as_0, mediaType));
_dumpLog.WriteLine(Localization.Core.Media_identified_as_0, mediaType);
ErrorNumber ret = outputBai.Create(_outputPath, mediaType, _formatOptions, romSize);
// Cannot create image
if(ret != ErrorNumber.NoError)
{
_dumpLog.WriteLine(Localization.Core.Error_0_creating_output_image_not_continuing, ret);
_dumpLog.WriteLine(outputBai.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputBai.ErrorMessage);
@@ -297,7 +286,6 @@ public partial class Dump
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -349,7 +337,7 @@ public partial class Dump
// TODO: Reset device after X errors
if(_stopOnError) return; // TODO: Return more cleanly
_dumpLog.WriteLine(Localization.Core.Skipping_0_bytes_from_errored_byte_1, _skip * 512, i * 512);
AaruLogging.WriteLine(Localization.Core.Skipping_0_bytes_from_errored_byte_1, _skip * 512, i * 512);
i += _skip - blocksToRead;
}
@@ -411,9 +399,9 @@ public partial class Dump
// TODO: Reset device after X errors
if(_stopOnError) return; // TODO: Return more cleanly
_dumpLog.WriteLine(Localization.Core.Skipping_0_bytes_from_errored_byte_1,
_skip * 512,
romSectors * 512);
AaruLogging.WriteLine(Localization.Core.Skipping_0_bytes_from_errored_byte_1,
_skip * 512,
romSectors * 512);
}
}
@@ -432,19 +420,6 @@ public partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(512 * (romSectors + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(512 * (romSectors + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
var metadata = new CommonTypes.Structs.ImageInfo
{
Application = "Aaru",
@@ -463,19 +438,17 @@ public partial class Dump
if(_preSidecar != null) outputBai.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputBai.Close();
_imageCloseStopwatch.Stop();
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
AaruLogging.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}

View File

@@ -44,6 +44,7 @@ using Aaru.Decoders.SCSI.MMC;
using Aaru.Decryption;
using Aaru.Decryption.DVD;
using Aaru.Devices;
using Aaru.Logging;
using DDS = Aaru.Decoders.DVD.DDS;
using DMI = Aaru.Decoders.Xbox.DMI;
using DVDDecryption = Aaru.Decryption.DVD.Dump;
@@ -63,9 +64,9 @@ partial class Dump
MediaType dskType = MediaType.Unknown;
bool sense;
byte[] tmpBuf;
var compactDisc = true;
var gotConfiguration = false;
var isXbox = false;
bool compactDisc = true;
bool gotConfiguration = false;
bool isXbox = false;
DVDDecryption dvdDecrypt = null;
_speedMultiplier = 1;
@@ -76,7 +77,7 @@ partial class Dump
{
gotConfiguration = true;
Features.SeparatedFeatures ftr = Features.Separate(cmdBuf);
_dumpLog.WriteLine(Localization.Core.Device_reports_current_profile_is_0, ftr.CurrentProfile);
AaruLogging.WriteLine(Localization.Core.Device_reports_current_profile_is_0, ftr.CurrentProfile);
switch(ftr.CurrentProfile)
{
@@ -308,7 +309,7 @@ partial class Dump
var scsiReader = new Reader(_dev, _dev.Timeout, null, _errorLog, _dumpRaw);
ulong blocks = scsiReader.GetDeviceBlocks();
_dumpLog.WriteLine(Localization.Core.Device_reports_disc_has_0_blocks, blocks);
AaruLogging.WriteLine(Localization.Core.Device_reports_disc_has_0_blocks, blocks);
Dictionary<MediaTagType, byte[]> mediaTags = new();
if(dskType == MediaType.PD650)
@@ -328,7 +329,7 @@ partial class Dump
switch(dskType)
{
case MediaType.Unknown when blocks > 0:
_dumpLog.WriteLine(Localization.Core.Reading_Physical_Format_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Physical_Format_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -346,9 +347,6 @@ partial class Dump
if(nintendoPfi is { DiskCategory: DiskCategory.Nintendo, PartVersion: 15 })
{
_dumpLog.WriteLine(Localization.Core
.Dumping_Nintendo_GameCube_or_Wii_discs_is_not_yet_implemented);
StoppingErrorMessage?.Invoke(Localization.Core
.Dumping_Nintendo_GameCube_or_Wii_discs_is_not_yet_implemented);
@@ -374,7 +372,8 @@ partial class Dump
case MediaType.HDDVDROM:
case MediaType.HDDVDRW:
case MediaType.HDDVDRWDL:
_dumpLog.WriteLine(Localization.Core.Reading_Physical_Format_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Physical_Format_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -424,7 +423,7 @@ partial class Dump
}
}
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Manufacturing_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Disc_Manufacturing_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -459,9 +458,6 @@ partial class Dump
if(sense || Inquiry.Decode(inqBuf)?.KreonPresent != true)
{
_dumpLog.WriteLine(Localization.Core
.Dumping_Xbox_Game_Discs_requires_a_drive_with_Kreon_firmware);
StoppingErrorMessage?.Invoke(Localization.Core
.Dumping_Xbox_Game_Discs_requires_a_drive_with_Kreon_firmware);
@@ -493,15 +489,11 @@ partial class Dump
#endregion Nintendo
#region All DVD and HD DVD types
#endregion All DVD and HD DVD types
#region DVD-ROM
if(dskType is MediaType.DVDDownload or MediaType.DVDROM)
{
_dumpLog.WriteLine(Localization.Core.Reading_Lead_in_Copyright_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Lead_in_Copyright_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -641,7 +633,7 @@ partial class Dump
case MediaType.DVDDownload:
case MediaType.DVDROM:
case MediaType.HDDVDROM:
_dumpLog.WriteLine(Localization.Core.Reading_Burst_Cutting_Area);
AaruLogging.WriteLine(Localization.Core.Reading_Burst_Cutting_Area);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -668,7 +660,7 @@ partial class Dump
case MediaType.DVDRAM:
case MediaType.HDDVDRAM:
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Description_Structure);
AaruLogging.WriteLine(Localization.Core.Reading_Disc_Description_Structure);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -690,7 +682,7 @@ partial class Dump
}
}
_dumpLog.WriteLine(Localization.Core.Reading_Spare_Area_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Spare_Area_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -720,7 +712,7 @@ partial class Dump
case MediaType.DVDR:
case MediaType.DVDRW:
_dumpLog.WriteLine(Localization.Core.Reading_Pre_Recorded_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Pre_Recorded_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -751,7 +743,7 @@ partial class Dump
case MediaType.DVDR:
case MediaType.DVDRW:
case MediaType.HDDVDR:
_dumpLog.WriteLine(Localization.Core.Reading_Media_Identifier);
AaruLogging.WriteLine(Localization.Core.Reading_Media_Identifier);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -770,7 +762,7 @@ partial class Dump
mediaTags.Add(MediaTagType.DVDR_MediaIdentifier, tmpBuf);
}
_dumpLog.WriteLine(Localization.Core.Reading_Recordable_Physical_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Recordable_Physical_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -799,7 +791,7 @@ partial class Dump
case MediaType.DVDPRDL:
case MediaType.DVDPRW:
case MediaType.DVDPRWDL:
_dumpLog.WriteLine(Localization.Core.Reading_ADdress_In_Pregroove);
AaruLogging.WriteLine(Localization.Core.Reading_ADdress_In_Pregroove);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -818,7 +810,7 @@ partial class Dump
mediaTags.Add(MediaTagType.DVD_ADIP, tmpBuf);
}
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Control_Blocks);
AaruLogging.WriteLine(Localization.Core.Reading_Disc_Control_Blocks);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -844,7 +836,7 @@ partial class Dump
#region HD DVD-ROM
case MediaType.HDDVDROM:
_dumpLog.WriteLine(Localization.Core.Reading_Lead_in_Copyright_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Lead_in_Copyright_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -875,7 +867,7 @@ partial class Dump
case MediaType.BDRXL:
case MediaType.BDREXL:
case MediaType.UHDBD:
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Disc_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -919,7 +911,7 @@ partial class Dump
case MediaType.BDROM:
case MediaType.UHDBD:
_dumpLog.WriteLine(Localization.Core.Reading_Burst_Cutting_Area);
AaruLogging.WriteLine(Localization.Core.Reading_Burst_Cutting_Area);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -948,7 +940,7 @@ partial class Dump
case MediaType.BDRE:
case MediaType.BDRXL:
case MediaType.BDREXL:
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Definition_Structure);
AaruLogging.WriteLine(Localization.Core.Reading_Disc_Definition_Structure);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -967,7 +959,7 @@ partial class Dump
mediaTags.Add(MediaTagType.BD_DDS, tmpBuf);
}
_dumpLog.WriteLine(Localization.Core.Reading_Spare_Area_Information);
AaruLogging.WriteLine(Localization.Core.Reading_Spare_Area_Information);
sense = _dev.ReadDiscStructure(out cmdBuf,
out _,
@@ -1033,7 +1025,7 @@ partial class Dump
Checksums = Checksum.GetChecksums(tag)
};
var tmp = new byte[tag.Length + 4];
byte[] tmp = new byte[tag.Length + 4];
Array.Copy(tag, 0, tmp, 4, tag.Length);
tmp[0] = (byte)((tag.Length & 0xFF00) >> 8);
tmp[1] = (byte)(tag.Length & 0xFF);

View File

@@ -38,6 +38,7 @@ using Aaru.CommonTypes;
using Aaru.CommonTypes.AaruMetadata;
using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Interfaces;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using Humanizer.Localisation;
@@ -59,7 +60,7 @@ partial class Dump
Dictionary<MediaTagType, byte[]> mediaTags, int sessions, out double totalChkDuration,
int? discOffset)
{
_dumpLog.WriteLine(Localization.Core.Creating_sidecar);
AaruLogging.WriteLine(Localization.Core.Creating_sidecar);
IFilter filter = PluginRegister.Singleton.GetFilter(_outputPath);
totalChkDuration = 0;
@@ -97,13 +98,13 @@ partial class Dump
totalChkDuration = _sidecarStopwatch.Elapsed.TotalMilliseconds;
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
AaruLogging.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
AaruLogging.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
if(_preSidecar != null)
{
@@ -131,7 +132,9 @@ partial class Dump
o.type
})
.Distinct())
_dumpLog.WriteLine(Localization.Core.Found_filesystem_0_at_sector_1, filesystem.type, filesystem.start);
AaruLogging.WriteLine(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start);
}
sidecar.OpticalDiscs[0].Dimensions = Dimensions.FromMediaType(mediaType);

View File

@@ -79,12 +79,11 @@ partial class Dump
return;
}
_dumpLog.WriteLine(Localization.Core.Initializing_reader);
AaruLogging.WriteLine(Localization.Core.Initializing_reader);
var scsiReader = new Reader(_dev, _dev.Timeout, null, _errorLog);
ulong blocks = scsiReader.GetDeviceBlocks();
uint blockSize = scsiReader.LogicalBlockSize;
_dumpLog.WriteLine(Localization.Core.Requesting_MODE_SENSE_6);
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_6);
sense = _dev.ModeSense6(out byte[] cmdBuf, out _, true, ScsiModeSensePageControl.Current, 0x3F, 5, out _);
@@ -96,9 +95,6 @@ partial class Dump
if(blockSize != 2048)
{
_dumpLog.WriteLine(Localization.Core
.MiniDisc_albums_NetMD_discs_or_user_written_audio_MiniDisc_cannot_be_dumped);
StoppingErrorMessage?.Invoke(Localization.Core
.MiniDisc_albums_NetMD_discs_or_user_written_audio_MiniDisc_cannot_be_dumped);
@@ -109,7 +105,7 @@ partial class Dump
if(scsiReader.FindReadCommand())
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_find_correct_read_command_0, scsiReader.ErrorMessage);
AaruLogging.Error(Localization.Core.ERROR_Cannot_find_correct_read_command_0, scsiReader.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Unable_to_read_medium);
return;
@@ -129,7 +125,7 @@ partial class Dump
// 64 works, gets maximum speed (150KiB/s), slow I know...
if(scsiReader.GetBlocksToRead())
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_get_blocks_to_read_0, scsiReader.ErrorMessage);
AaruLogging.Error(Localization.Core.ERROR_Cannot_get_blocks_to_read_0, scsiReader.ErrorMessage);
StoppingErrorMessage?.Invoke(scsiReader.ErrorMessage);
return;
@@ -140,7 +136,7 @@ partial class Dump
if(blocks == 0)
{
_dumpLog.WriteLine(Localization.Core.ERROR_Unable_to_read_medium_or_empty_medium_present);
AaruLogging.Error(Localization.Core.ERROR_Unable_to_read_medium_or_empty_medium_present);
StoppingErrorMessage?.Invoke(Localization.Core.Unable_to_read_medium_or_empty_medium_present);
return;
@@ -160,13 +156,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.SCSI_medium_type_0, scsiMediumType));
UpdateStatus?.Invoke(string.Format(Localization.Core.Media_identified_as_0, dskType));
_dumpLog.WriteLine(Localization.Core.Device_reports_0_blocks_1_bytes, blocks, blocks * blockSize);
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_at_a_time, blocksToRead);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_logical_block, blockSize);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_physical_block, scsiReader.LongBlockSize);
_dumpLog.WriteLine(Localization.Core.SCSI_device_type_0, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.SCSI_medium_type_0, scsiMediumType);
_dumpLog.WriteLine(Localization.Core.Media_identified_as_0, dskType);
sense = _dev.MiniDiscGetType(out cmdBuf, out _, _dev.Timeout, out _);
@@ -198,20 +187,15 @@ partial class Dump
foreach(MediaTagType tag in mediaTags.Keys.Where(tag => !outputFormat.SupportedMediaTags.Contains(tag)))
{
ret = false;
_dumpLog.WriteLine(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
ErrorMessage?.Invoke(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
}
if(!ret)
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_continuing);
ErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_not_continuing);
return;
@@ -219,7 +203,6 @@ partial class Dump
}
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin",
_dev,
@@ -235,9 +218,6 @@ partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -262,12 +242,6 @@ partial class Dump
if(!rigidPage.HasValue || setGeometry) continue;
_dumpLog.WriteLine(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
rigidPage.Value.Cylinders,
rigidPage.Value.Heads,
(uint)(blocks / (rigidPage.Value.Cylinders * rigidPage.Value.Heads)));
UpdateStatus?.Invoke(string.Format(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
rigidPage.Value.Cylinders,
@@ -290,12 +264,6 @@ partial class Dump
if(!flexiblePage.HasValue) continue;
_dumpLog.WriteLine(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
flexiblePage.Value.Cylinders,
flexiblePage.Value.Heads,
flexiblePage.Value.SectorsPerTrack);
UpdateStatus?.Invoke(string.Format(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
flexiblePage.Value.Cylinders,
@@ -339,10 +307,7 @@ partial class Dump
}
if(_resume.NextBlock > 0)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Resuming_from_block_0, _resume.NextBlock));
_dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
}
if(_createGraph)
{
@@ -373,7 +338,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -432,7 +396,7 @@ partial class Dump
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}
@@ -478,26 +442,12 @@ partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Trimming
if(_resume.BadBlocks.Count > 0 && !_aborted && _trim && newTrim)
{
_trimStopwatch.Restart();
UpdateStatus?.Invoke(Localization.Core.Trimming_skipped_sectors);
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
ulong[] tmpArray = _resume.BadBlocks.ToArray();
InitProgress?.Invoke();
@@ -508,7 +458,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -530,9 +479,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
#endregion Trimming
@@ -627,7 +573,6 @@ partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
sense = _dev.ModeSelect(md6, out byte[] senseBuf, true, false, _dev.Timeout, out _);
if(sense)
@@ -636,9 +581,6 @@ partial class Dump
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
AaruLogging.Debug(Localization.Core.Error_0, Sense.PrettifySense(senseBuf));
_dumpLog.WriteLine(Localization.Core
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
}
else
runningPersistent = true;
@@ -654,7 +596,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -702,8 +643,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1, badSector, pass);
}
else if(runningPersistent) outputFormat.WriteSector(readBuffer, badSector);
}
@@ -730,7 +669,6 @@ partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
_dev.ModeSelect(md6, out _, true, false, _dev.Timeout, out _);
}
@@ -741,7 +679,8 @@ partial class Dump
_resume.BadBlocks.Sort();
foreach(ulong bad in _resume.BadBlocks) _dumpLog.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
foreach(ulong bad in _resume.BadBlocks)
AaruLogging.Information(Localization.Core.Sector_0_could_not_be_read, bad);
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
@@ -762,7 +701,6 @@ partial class Dump
if(_preSidecar != null) outputFormat.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputFormat.Close();
@@ -771,13 +709,10 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}
@@ -787,7 +722,6 @@ partial class Dump
if(_metadata)
{
UpdateStatus?.Invoke(Localization.Core.Creating_sidecar);
_dumpLog.WriteLine(Localization.Core.Creating_sidecar);
IFilter filter = PluginRegister.Singleton.GetFilter(_outputPath);
var inputPlugin = ImageFormat.Detect(filter) as IMediaImage;
ErrorNumber opened = inputPlugin.Open(filter);
@@ -823,14 +757,6 @@ partial class Dump
.Per(totalChkDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
if(_preSidecar != null)
{
_preSidecar.BlockMedias = sidecar.BlockMedias;
@@ -859,10 +785,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start));
_dumpLog.WriteLine(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start);
}
}

View File

@@ -81,7 +81,6 @@ public partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_detect_capacity);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_detect_capacity);
return;
@@ -98,7 +97,6 @@ public partial class Dump
if(blocks == 0)
{
_dumpLog.WriteLine(Localization.Core.ERROR_Unable_to_read_medium_or_empty_medium_present);
StoppingErrorMessage?.Invoke(Localization.Core.Unable_to_read_medium_or_empty_medium_present);
return;
@@ -115,13 +113,11 @@ public partial class Dump
if(blocks > 262144)
{
dskType = MediaType.MemoryStickProDuo;
_dumpLog.WriteLine(Localization.Core.Media_detected_as_MemoryStick_Pro_Duo);
UpdateStatus?.Invoke(Localization.Core.Media_detected_as_MemoryStick_Pro_Duo);
}
else
{
dskType = MediaType.MemoryStickDuo;
_dumpLog.WriteLine(Localization.Core.Media_detected_as_MemoryStick_Duo);
UpdateStatus?.Invoke(Localization.Core.Media_detected_as_MemoryStick_Duo);
}
@@ -141,9 +137,6 @@ public partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -178,7 +171,7 @@ public partial class Dump
return;
}
if(_resume.NextBlock > 0) _dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
if(_resume.NextBlock > 0) AaruLogging.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
if(_createGraph)
{
@@ -210,7 +203,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -278,7 +270,7 @@ public partial class Dump
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}
@@ -324,18 +316,6 @@ public partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Trimming
@@ -343,7 +323,6 @@ public partial class Dump
{
_trimStopwatch.Restart();
UpdateStatus?.Invoke(Localization.Core.Trimming_skipped_sectors);
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
ulong[] tmpArray = _resume.BadBlocks.ToArray();
InitProgress?.Invoke();
@@ -354,7 +333,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -392,8 +370,8 @@ public partial class Dump
EndProgress?.Invoke();
_trimStopwatch.Stop();
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
AaruLogging.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
#endregion Trimming
@@ -511,7 +489,6 @@ public partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
sense = _dev.ModeSelect(md6, out senseBuf, true, false, _dev.Timeout, out _);
if(sense)
@@ -520,9 +497,6 @@ public partial class Dump
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
AaruLogging.Debug(Localization.Core.Error_0, Sense.PrettifySense(senseBuf));
_dumpLog.WriteLine(Localization.Core
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
}
else
runningPersistent = true;
@@ -537,7 +511,7 @@ public partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -594,8 +568,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1, badSector, pass);
}
else if(runningPersistent) outputFormat.WriteSector(readBuffer, badSector);
}
@@ -622,7 +594,6 @@ public partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
_dev.ModeSelect(md6, out _, true, false, _dev.Timeout, out _);
}
@@ -633,7 +604,8 @@ public partial class Dump
_resume.BadBlocks.Sort();
foreach(ulong bad in _resume.BadBlocks) _dumpLog.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
foreach(ulong bad in _resume.BadBlocks)
AaruLogging.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
@@ -654,7 +626,6 @@ public partial class Dump
if(_preSidecar != null) outputFormat.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputFormat.Close();
@@ -663,13 +634,9 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}
@@ -679,7 +646,6 @@ public partial class Dump
if(_metadata)
{
UpdateStatus?.Invoke(Localization.Core.Creating_sidecar);
_dumpLog.WriteLine(Localization.Core.Creating_sidecar);
IFilter filter = PluginRegister.Singleton.GetFilter(_outputPath);
var inputPlugin = ImageFormat.Detect(filter) as IMediaImage;
ErrorNumber opened = inputPlugin.Open(filter);
@@ -715,14 +681,6 @@ public partial class Dump
.Per(totalChkDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
if(_preSidecar != null)
{
_preSidecar.BlockMedias = sidecar.BlockMedias;
@@ -751,10 +709,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start));
_dumpLog.WriteLine(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start);
}
}

View File

@@ -37,6 +37,7 @@ using Aaru.CommonTypes.Interfaces;
using Aaru.CommonTypes.Structs.Devices.SCSI;
using Aaru.Decoders.SCSI;
using Aaru.Devices;
using Aaru.Logging;
namespace Aaru.Core.Devices.Dumping;
@@ -52,9 +53,6 @@ public partial class Dump
!_outputPlugin.SupportedMediaTypes.Contains(MediaType.MemoryStickProDuo) &&
!_outputPlugin.SupportedMediaTypes.Contains(MediaType.UMD))
{
_dumpLog.WriteLine(Localization.Core
.Selected_output_format_does_not_support_MemoryStick_Duo_or_UMD_cannot_dump);
StoppingErrorMessage?.Invoke(Localization.Core
.Selected_output_format_does_not_support_MemoryStick_Duo_or_UMD_cannot_dump);
@@ -62,7 +60,6 @@ public partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Checking_if_media_is_UMD_or_MemoryStick);
_dumpLog.WriteLine(Localization.Core.Checking_if_media_is_UMD_or_MemoryStick);
bool sense = _dev.ModeSense6(out byte[] buffer,
out _,
@@ -74,7 +71,6 @@ public partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_get_MODE_SENSE);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_get_MODE_SENSE);
return;
@@ -84,7 +80,6 @@ public partial class Dump
if(!decoded.HasValue)
{
_dumpLog.WriteLine(Localization.Core.Could_not_decode_MODE_SENSE);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_decode_MODE_SENSE);
return;
@@ -102,13 +97,12 @@ public partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_read);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
return;
}
var tmp = new byte[8];
byte[] tmp = new byte[8];
Array.Copy(buffer, 0x36, tmp, 0, 8);
@@ -120,12 +114,11 @@ public partial class Dump
return;
}
var fatStart = (ushort)((buffer[0x0F] << 8) + buffer[0x0E]);
var sectorsPerFat = (ushort)((buffer[0x17] << 8) + buffer[0x16]);
var rootStart = (ushort)(sectorsPerFat * 2 + fatStart);
ushort fatStart = (ushort)((buffer[0x0F] << 8) + buffer[0x0E]);
ushort sectorsPerFat = (ushort)((buffer[0x17] << 8) + buffer[0x16]);
ushort rootStart = (ushort)(sectorsPerFat * 2 + fatStart);
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_root_directory_in_sector_0, rootStart));
_dumpLog.WriteLine(Localization.Core.Reading_root_directory_in_sector_0, rootStart);
sense = _dev.Read12(out buffer,
out _,
@@ -145,7 +138,6 @@ public partial class Dump
if(sense)
{
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
_dumpLog.WriteLine(Localization.Core.Could_not_read);
return;
}
@@ -164,12 +156,11 @@ public partial class Dump
fatStart,
sectorsPerFat));
_dumpLog.WriteLine(Localization.Core.FAT_starts_at_sector_0_and_runs_for_1_sectors, fatStart, sectorsPerFat);
AaruLogging.WriteLine(Localization.Core.FAT_starts_at_sector_0_and_runs_for_1_sectors, fatStart, sectorsPerFat);
UpdateStatus?.Invoke(Localization.Core.Reading_FAT);
_dumpLog.WriteLine(Localization.Core.Reading_FAT);
var fat = new byte[sectorsPerFat * 512];
byte[] fat = new byte[sectorsPerFat * 512];
uint position = 0;
@@ -197,7 +188,6 @@ public partial class Dump
if(sense)
{
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
_dumpLog.WriteLine(Localization.Core.Could_not_read);
return;
}
@@ -208,13 +198,12 @@ public partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Traversing_FAT);
_dumpLog.WriteLine(Localization.Core.Traversing_FAT);
var previousCluster = BitConverter.ToUInt16(fat, 4);
ushort previousCluster = BitConverter.ToUInt16(fat, 4);
for(var i = 3; i < fat.Length / 2; i++)
for(int i = 3; i < fat.Length / 2; i++)
{
var nextCluster = BitConverter.ToUInt16(fat, i * 2);
ushort nextCluster = BitConverter.ToUInt16(fat, i * 2);
if(nextCluster == previousCluster + 1)
{

View File

@@ -91,7 +91,6 @@ public partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_read);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
return;
@@ -104,7 +103,6 @@ public partial class Dump
ushort umdStart = (ushort)(rootStart + rootSize);
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_root_directory_in_sector_0, rootStart));
_dumpLog.WriteLine(Localization.Core.Reading_root_directory_in_sector_0, rootStart);
sense = _dev.Read12(out readBuffer,
out _,
@@ -123,7 +121,6 @@ public partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_read);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_read);
return;
@@ -148,13 +145,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.SCSI_device_type_0, _dev.ScsiType));
UpdateStatus?.Invoke(string.Format(Localization.Core.Media_identified_as_0, dskType));
UpdateStatus?.Invoke(string.Format(Localization.Core.Media_part_number_is_0, mediaPartNumber));
_dumpLog.WriteLine(Localization.Core.Device_reports_0_blocks_1_bytes, blocks, blocks * blockSize);
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_at_a_time, blocksToRead);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_logical_block, blockSize);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_physical_block, blockSize);
_dumpLog.WriteLine(Localization.Core.SCSI_device_type_0, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.Media_identified_as_0, dskType);
_dumpLog.WriteLine(Localization.Core.Media_part_number_is_0, mediaPartNumber);
bool ret;
@@ -172,9 +162,6 @@ public partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputOptical.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputOptical.ErrorMessage);
@@ -222,7 +209,7 @@ public partial class Dump
return;
}
if(_resume.NextBlock > 0) _dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
if(_resume.NextBlock > 0) AaruLogging.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
if(_createGraph)
{
@@ -254,7 +241,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -322,7 +308,7 @@ public partial class Dump
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.Information(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}
@@ -367,25 +353,13 @@ public partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Trimming
if(_resume.BadBlocks.Count > 0 && !_aborted && _trim && newTrim)
{
_trimStopwatch.Restart();
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
AaruLogging.WriteLine(Localization.Core.Trimming_skipped_sectors);
ulong[] tmpArray = _resume.BadBlocks.ToArray();
InitProgress?.Invoke();
@@ -395,7 +369,7 @@ public partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -433,8 +407,8 @@ public partial class Dump
EndProgress?.Invoke();
_trimStopwatch.Stop();
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
AaruLogging.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
#endregion Trimming
@@ -528,7 +502,7 @@ public partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
AaruLogging.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
sense = _dev.ModeSelect(md6, out senseBuf, true, false, _dev.Timeout, out _);
if(sense)
@@ -537,9 +511,6 @@ public partial class Dump
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
AaruLogging.Debug(Localization.Core.Error_0, Sense.PrettifySense(senseBuf));
_dumpLog.WriteLine(Localization.Core
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
}
else
runningPersistent = true;
@@ -554,7 +525,7 @@ public partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
AaruLogging.WriteLine(Localization.Core.Aborted);
break;
}
@@ -611,8 +582,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1, badSector, pass);
}
else if(runningPersistent) outputOptical.WriteSector(readBuffer, badSector);
}
@@ -638,7 +607,7 @@ public partial class Dump
md6 = Modes.EncodeMode6(md, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
AaruLogging.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
_dev.ModeSelect(md6, out _, true, false, _dev.Timeout, out _);
}
@@ -650,7 +619,8 @@ public partial class Dump
_resume.BadBlocks.Sort();
foreach(ulong bad in _resume.BadBlocks) _dumpLog.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
foreach(ulong bad in _resume.BadBlocks)
AaruLogging.Information(Localization.Core.Sector_0_could_not_be_read, bad);
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
@@ -672,19 +642,17 @@ public partial class Dump
if(_preSidecar != null) outputOptical.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputOptical.Close();
_imageCloseStopwatch.Stop();
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
AaruLogging.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}

View File

@@ -46,7 +46,7 @@ public partial class Dump
/// <summary>Dumps a SCSI Block Commands device or a Reduced Block Commands devices</summary>
void Scsi()
{
var resets = 0;
int resets = 0;
if(_dev.IsRemovable)
{
@@ -65,10 +65,6 @@ public partial class Dump
decSense.Value.ASC,
decSense.Value.ASCQ));
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
// Just retry, for 5 times
if(decSense.Value.ASC == 0x29)
@@ -82,7 +78,7 @@ public partial class Dump
{
case 0x3A:
{
var leftRetries = 5;
int leftRetries = 5;
while(leftRetries > 0)
{
@@ -100,11 +96,6 @@ public partial class Dump
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ));
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
}
leftRetries--;
@@ -121,7 +112,7 @@ public partial class Dump
}
case 0x04 when decSense.Value.ASCQ == 0x01:
{
var leftRetries = 50;
int leftRetries = 50;
while(leftRetries > 0)
{
@@ -139,11 +130,6 @@ public partial class Dump
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ));
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
}
leftRetries--;
@@ -176,7 +162,7 @@ public partial class Dump
// These should be trapped by the OS but seems in some cases they're not
case 0x28:
{
var leftRetries = 10;
int leftRetries = 10;
while(leftRetries > 0)
{
@@ -194,11 +180,6 @@ public partial class Dump
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ));
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
}
leftRetries--;

View File

@@ -48,6 +48,7 @@ using Aaru.Decoders.SCSI;
using Aaru.Decoders.SCSI.SSC;
using Aaru.Devices;
using Aaru.Helpers;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using Humanizer.Localisation;
@@ -80,10 +81,10 @@ partial class Dump
if(decSense.HasValue && decSense?.SenseKey != SenseKeys.NoSense)
{
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
StoppingErrorMessage?.Invoke(Localization.Core.Drive_has_status_error_please_correct_Sense_follows +
Environment.NewLine +
@@ -98,7 +99,6 @@ partial class Dump
decSense?.ASCQ != 0x04 &&
decSense?.SenseKey != SenseKeys.IllegalRequest)
{
_dumpLog.WriteLine(Localization.Core.Rewinding_please_wait);
PulseProgress?.Invoke(Localization.Core.Rewinding_please_wait);
// Rewind, let timeout apply
@@ -124,12 +124,12 @@ partial class Dump
Environment.NewLine +
decSense?.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
return;
}
@@ -152,12 +152,12 @@ partial class Dump
Environment.NewLine +
decSense?.Description);
_dumpLog.WriteLine(Localization.Core.Could_not_get_position_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Could_not_get_position_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
return;
}
@@ -168,7 +168,6 @@ partial class Dump
if(cmdBuf[1] != 0)
{
UpdateStatus?.Invoke(Localization.Core.Drive_not_in_partition_0_Rewinding_please_wait);
_dumpLog.WriteLine(Localization.Core.Drive_not_in_partition_0_Rewinding_please_wait);
// Rewind, let timeout apply
sense = _dev.Locate(out senseBuf, false, 0, 0, _dev.Timeout, out duration);
@@ -179,12 +178,12 @@ partial class Dump
Environment.NewLine +
decSense?.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
return;
}
@@ -207,12 +206,12 @@ partial class Dump
Environment.NewLine +
decSense?.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
return;
}
@@ -227,12 +226,12 @@ partial class Dump
Environment.NewLine +
decSense?.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
return;
}
@@ -243,7 +242,6 @@ partial class Dump
StoppingErrorMessage?.Invoke(Localization.Core
.Drive_could_not_rewind_to_partition_0_but_no_error_occurred);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_rewind_to_partition_0_but_no_error_occurred);
return;
}
@@ -285,9 +283,8 @@ partial class Dump
Modes.DecodedMode? decMode = null;
if(!sense && !_dev.Error)
{
if(Modes.DecodeMode10(cmdBuf, _dev.ScsiType).HasValue) decMode = Modes.DecodeMode10(cmdBuf, _dev.ScsiType);
}
if(Modes.DecodeMode10(cmdBuf, _dev.ScsiType).HasValue)
decMode = Modes.DecodeMode10(cmdBuf, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_6);
@@ -315,9 +312,8 @@ partial class Dump
if(sense || _dev.Error) sense = _dev.ModeSense(out cmdBuf, out senseBuf, 5, out duration);
if(!sense && !_dev.Error)
{
if(Modes.DecodeMode6(cmdBuf, _dev.ScsiType).HasValue) decMode = Modes.DecodeMode6(cmdBuf, _dev.ScsiType);
}
if(Modes.DecodeMode6(cmdBuf, _dev.ScsiType).HasValue)
decMode = Modes.DecodeMode6(cmdBuf, _dev.ScsiType);
// TODO: Check partitions page
if(decMode.HasValue)
@@ -360,17 +356,13 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.SCSI_density_type_0, scsiDensityCodeTape));
UpdateStatus?.Invoke(string.Format(Localization.Core.Media_identified_as_0, dskType));
_dumpLog.WriteLine(Localization.Core.SCSI_device_type_0, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.SCSI_medium_type_0, scsiMediumTypeTape);
_dumpLog.WriteLine(Localization.Core.SCSI_density_type_0, scsiDensityCodeTape);
_dumpLog.WriteLine(Localization.Core.Media_identified_as_0, dskType);
var endOfMedia = false;
bool endOfMedia = false;
ulong currentBlock = 0;
uint currentFile = 0;
byte currentPartition = 0;
byte totalPartitions = 1; // TODO: Handle partitions.
var fixedLen = false;
bool fixedLen = false;
uint transferLen = blockSize;
firstRead:
@@ -413,12 +405,12 @@ partial class Dump
Environment.NewLine +
decSense.Value.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_return_back_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_return_back_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -444,12 +436,12 @@ partial class Dump
Environment.NewLine +
decSense.Value.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_read_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_read_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -484,10 +476,6 @@ partial class Dump
blockSize,
currentBlock));
_dumpLog.WriteLine(Localization.Core.Blocksize_changed_to_0_bytes_at_block_1,
blockSize,
currentBlock);
sense = _dev.Space(out senseBuf,
SscSpaceCodes.LogicalBlock,
-1,
@@ -505,12 +493,13 @@ partial class Dump
Environment.NewLine +
decSense.Value.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_go_back_one_block_Sense_follows);
AaruLogging.WriteLine(Localization.Core
.Drive_could_not_go_back_one_block_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -522,12 +511,12 @@ partial class Dump
Environment.NewLine +
decSense.Value.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_read_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_read_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -536,12 +525,12 @@ partial class Dump
Environment.NewLine +
decSense.Value.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_read_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_read_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -549,7 +538,6 @@ partial class Dump
else
{
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_read_device_dont_know_why_exiting);
_dumpLog.WriteLine(Localization.Core.Cannot_read_device_dont_know_why_exiting);
return;
}
@@ -573,12 +561,12 @@ partial class Dump
Environment.NewLine +
decSense.Value.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_return_back_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_return_back_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -609,11 +597,10 @@ partial class Dump
return;
}
var canLocateLong = false;
var canLocate = false;
bool canLocateLong = false;
bool canLocate = false;
UpdateStatus?.Invoke(Localization.Core.Positioning_tape_to_block_1);
_dumpLog.WriteLine(Localization.Core.Positioning_tape_to_block_1);
sense = _dev.Locate16(out senseBuf, 1, _dev.Timeout, out _);
@@ -629,7 +616,6 @@ partial class Dump
{
canLocateLong = true;
UpdateStatus?.Invoke(Localization.Core.LOCATE_LONG_works);
_dumpLog.WriteLine(Localization.Core.LOCATE_LONG_works);
}
}
}
@@ -648,7 +634,6 @@ partial class Dump
{
canLocate = true;
UpdateStatus?.Invoke(Localization.Core.LOCATE_works);
_dumpLog.WriteLine(Localization.Core.LOCATE_works);
}
}
}
@@ -656,7 +641,6 @@ partial class Dump
if(_resume.NextBlock > 0)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Positioning_tape_to_block_0, _resume.NextBlock));
_dumpLog.WriteLine(Localization.Core.Positioning_tape_to_block_0, _resume.NextBlock);
if(canLocateLong)
{
@@ -670,18 +654,12 @@ partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core
.Could_not_check_current_position_unable_to_resume_If_you_want_to_continue_use_force);
StoppingErrorMessage?.Invoke(Localization.Core
.Could_not_check_current_position_unable_to_resume_If_you_want_to_continue_use_force);
return;
}
_dumpLog.WriteLine(Localization.Core
.Could_not_check_current_position_unable_to_resume_Dumping_from_the_start);
ErrorMessage?.Invoke(Localization.Core
.Could_not_check_current_position_unable_to_resume_Dumping_from_the_start);
@@ -695,18 +673,12 @@ partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_If_you_want_to_continue_use_force);
StoppingErrorMessage?.Invoke(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_If_you_want_to_continue_use_force);
return;
}
_dumpLog.WriteLine(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_Dumping_from_the_start);
ErrorMessage?.Invoke(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_Dumping_from_the_start);
@@ -718,18 +690,12 @@ partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core
.Cannot_reposition_tape_unable_to_resume_If_you_want_to_continue_use_force);
StoppingErrorMessage?.Invoke(Localization.Core
.Cannot_reposition_tape_unable_to_resume_If_you_want_to_continue_use_force);
return;
}
_dumpLog.WriteLine(Localization.Core
.Cannot_reposition_tape_unable_to_resume_Dumping_from_the_start);
ErrorMessage?.Invoke(Localization.Core
.Cannot_reposition_tape_unable_to_resume_Dumping_from_the_start);
@@ -748,18 +714,12 @@ partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core
.Could_not_check_current_position_unable_to_resume_If_you_want_to_continue_use_force);
StoppingErrorMessage?.Invoke(Localization.Core
.Could_not_check_current_position_unable_to_resume_If_you_want_to_continue_use_force);
return;
}
_dumpLog.WriteLine(Localization.Core
.Could_not_check_current_position_unable_to_resume_Dumping_from_the_start);
ErrorMessage?.Invoke(Localization.Core
.Could_not_check_current_position_unable_to_resume_Dumping_from_the_start);
@@ -773,18 +733,12 @@ partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_If_you_want_to_continue_use_force);
StoppingErrorMessage?.Invoke(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_If_you_want_to_continue_use_force);
return;
}
_dumpLog.WriteLine(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_Dumping_from_the_start);
ErrorMessage?.Invoke(Localization.Core
.Current_position_is_not_as_expected_unable_to_resume_Dumping_from_the_start);
@@ -796,18 +750,12 @@ partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core
.Cannot_reposition_tape_unable_to_resume_If_you_want_to_continue_use_force);
StoppingErrorMessage?.Invoke(Localization.Core
.Cannot_reposition_tape_unable_to_resume_If_you_want_to_continue_use_force);
return;
}
_dumpLog.WriteLine(Localization.Core
.Cannot_reposition_tape_unable_to_resume_Dumping_from_the_start);
ErrorMessage?.Invoke(Localization.Core
.Cannot_reposition_tape_unable_to_resume_Dumping_from_the_start);
@@ -818,16 +766,12 @@ partial class Dump
{
if(!_force)
{
_dumpLog.WriteLine(Localization.Core
.Cannot_reposition_tape_unable_to_resume_If_you_want_to_continue_use_force);
StoppingErrorMessage?.Invoke(Localization.Core
.Cannot_reposition_tape_unable_to_resume_If_you_want_to_continue_use_force);
return;
}
_dumpLog.WriteLine(Localization.Core.Cannot_reposition_tape_unable_to_resume_Dumping_from_the_start);
ErrorMessage?.Invoke(Localization.Core.Cannot_reposition_tape_unable_to_resume_Dumping_from_the_start);
canLocate = false;
}
@@ -855,12 +799,12 @@ partial class Dump
Environment.NewLine +
decSense.Value.Description);
_dumpLog.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_rewind_please_correct_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -871,9 +815,6 @@ partial class Dump
// Cannot set image to tape mode
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_setting_output_image_in_tape_mode_not_continuing);
_dumpLog.WriteLine(outputTape.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_setting_output_image_in_tape_mode_not_continuing +
Environment.NewLine +
outputTape.ErrorMessage);
@@ -886,9 +827,6 @@ partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputTape.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputTape.ErrorMessage);
@@ -942,7 +880,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -950,7 +887,6 @@ partial class Dump
if(endOfMedia)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Finished_partition_0, currentPartition));
_dumpLog.WriteLine(Localization.Core.Finished_partition_0, currentPartition);
currentTapeFile.LastBlock = currentBlock - 1;
@@ -1040,10 +976,6 @@ partial class Dump
blockSize,
currentBlock));
_dumpLog.WriteLine(Localization.Core.Blocksize_changed_to_0_bytes_at_block_1,
blockSize,
currentBlock);
sense = _dev.Space(out senseBuf, SscSpaceCodes.LogicalBlock, -1, _dev.Timeout, out duration);
totalDuration += duration;
@@ -1057,12 +989,12 @@ partial class Dump
decSense.Value.Description);
outputTape.Close();
_dumpLog.WriteLine(Localization.Core.Drive_could_not_go_back_one_block_Sense_follows);
AaruLogging.WriteLine(Localization.Core.Drive_could_not_go_back_one_block_Sense_follows);
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
return;
}
@@ -1075,7 +1007,6 @@ partial class Dump
case SenseKeys.BlankCheck when currentBlock == 0:
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_dump_a_blank_tape);
outputTape.Close();
_dumpLog.WriteLine(Localization.Core.Cannot_dump_a_blank_tape);
return;
@@ -1085,13 +1016,11 @@ partial class Dump
// TODO: Detect end of partition
endOfMedia = true;
UpdateStatus?.Invoke(Localization.Core.Found_end_of_tape_partition);
_dumpLog.WriteLine(Localization.Core.Found_end_of_tape_partition);
continue;
case SenseKeys.BlankCheck:
StoppingErrorMessage?.Invoke(Localization.Core.Blank_block_found_end_of_tape);
endOfMedia = true;
_dumpLog.WriteLine(Localization.Core.Blank_block_found_end_of_tape);
continue;
}
@@ -1102,7 +1031,6 @@ partial class Dump
// TODO: Detect end of partition
endOfMedia = true;
UpdateStatus?.Invoke(Localization.Core.Found_end_of_tape_partition);
_dumpLog.WriteLine(Localization.Core.Found_end_of_tape_partition);
continue;
case SenseKeys.NoSense or SenseKeys.RecoveredError when decSense.Value.ASCQ == 0x01 || filemark:
@@ -1122,7 +1050,6 @@ partial class Dump
currentFile,
currentBlock));
_dumpLog.WriteLine(Localization.Core.Changed_to_file_0_at_block_1, currentFile, currentBlock);
continue;
}
@@ -1133,10 +1060,11 @@ partial class Dump
.Drive_could_not_read_block_0_Sense_cannot_be_decoded_look_at_log_for_dump,
currentBlock));
_dumpLog.WriteLine(string.Format(Localization.Core.Drive_could_not_read_block_0_Sense_bytes_follow,
currentBlock));
AaruLogging.Information(string.Format(Localization.Core
.Drive_could_not_read_block_0_Sense_bytes_follow,
currentBlock));
_dumpLog.WriteLine(PrintHex.ByteArrayToHexArrayString(senseBuf, 32));
AaruLogging.Information(PrintHex.ByteArrayToHexArrayString(senseBuf, 32));
}
else
{
@@ -1146,13 +1074,13 @@ partial class Dump
decSense.Value.SenseKey,
decSense.Value.Description));
_dumpLog.WriteLine(string.Format(Localization.Core.Drive_could_not_read_block_0_Sense_follows,
currentBlock));
AaruLogging.WriteLine(string.Format(Localization.Core.Drive_could_not_read_block_0_Sense_follows,
currentBlock));
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
}
// TODO: Reset device after X errors
@@ -1230,25 +1158,13 @@ partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Error handling
if(_resume.BadBlocks.Count > 0 && !_aborted && _retryPasses > 0 && (canLocate || canLocateLong))
{
var pass = 1;
var forward = false;
int pass = 1;
bool forward = false;
const bool runningPersistent = false;
Modes.ModePage? currentModePage;
@@ -1268,7 +1184,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -1297,7 +1212,6 @@ partial class Dump
}
UpdateStatus?.Invoke(string.Format(Localization.Core.Positioning_tape_to_block_0, badBlock));
_dumpLog.WriteLine(string.Format(Localization.Core.Positioning_tape_to_block_0, badBlock));
if(canLocateLong)
{
@@ -1309,7 +1223,6 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_check_current_position_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_check_current_position_continuing);
continue;
@@ -1319,8 +1232,6 @@ partial class Dump
if(position != _resume.NextBlock)
{
_dumpLog.WriteLine(Localization.Core.Current_position_is_not_as_expected_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Current_position_is_not_as_expected_continuing);
@@ -1329,8 +1240,6 @@ partial class Dump
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Cannot_position_tape_to_block_0, badBlock));
ErrorMessage?.Invoke(string.Format(Localization.Core.Cannot_position_tape_to_block_0,
badBlock));
@@ -1347,7 +1256,6 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Could_not_check_current_position_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Could_not_check_current_position_continuing);
continue;
@@ -1357,8 +1265,6 @@ partial class Dump
if(position != _resume.NextBlock)
{
_dumpLog.WriteLine(Localization.Core.Current_position_is_not_as_expected_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Current_position_is_not_as_expected_continuing);
@@ -1367,8 +1273,6 @@ partial class Dump
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Cannot_position_tape_to_block_0, badBlock));
ErrorMessage?.Invoke(string.Format(Localization.Core.Cannot_position_tape_to_block_0,
badBlock));
@@ -1396,8 +1300,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badBlock,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1, badBlock, pass);
}
else if(runningPersistent) outputTape.WriteSector(cmdBuf, badBlock);
}
@@ -1425,7 +1327,8 @@ partial class Dump
_resume.BadBlocks.Sort();
foreach(ulong bad in _resume.BadBlocks) _dumpLog.WriteLine(Localization.Core.Block_0_could_not_be_read, bad);
foreach(ulong bad in _resume.BadBlocks)
AaruLogging.Information(Localization.Core.Block_0_could_not_be_read, bad);
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
@@ -1447,7 +1350,6 @@ partial class Dump
if(_preSidecar != null) outputTape.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputTape.Close();
@@ -1456,21 +1358,10 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}
@@ -1480,7 +1371,6 @@ partial class Dump
if(_metadata)
{
UpdateStatus?.Invoke(Localization.Core.Creating_sidecar);
_dumpLog.WriteLine(Localization.Core.Creating_sidecar);
IFilter filter = PluginRegister.Singleton.GetFilter(_outputPath);
var inputPlugin = ImageFormat.Detect(filter) as IMediaImage;
ErrorNumber opened = inputPlugin.Open(filter);
@@ -1516,14 +1406,6 @@ partial class Dump
.Per(totalChkDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
if(_preSidecar != null)
{
_preSidecar.BlockMedias = sidecar.BlockMedias;
@@ -1552,10 +1434,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start));
_dumpLog.WriteLine(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start);
}
}

View File

@@ -32,6 +32,7 @@ using Aaru.CommonTypes.Extents;
using Aaru.CommonTypes.Interfaces;
using Aaru.Core.Logging;
using Aaru.Decryption.DVD;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
@@ -89,7 +90,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -118,7 +118,7 @@ partial class Dump
_writeStopwatch.Restart();
byte[] tmpBuf;
var cmi = new byte[blocksToRead];
byte[] cmi = new byte[blocksToRead];
for(uint j = 0; j < blocksToRead; j++)
{
@@ -183,7 +183,7 @@ partial class Dump
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}

View File

@@ -35,6 +35,7 @@ using Aaru.Core.Logging;
using Aaru.Decoders.DVD;
using Aaru.Decryption;
using Aaru.Decryption.DVD;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using DVDDecryption = Aaru.Decryption.DVD.Dump;
@@ -84,7 +85,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -203,8 +203,6 @@ partial class Dump
_resume.NextBlock++;
_aborted = true;
_dumpLog?.WriteLine(Localization.Core
.INSITE_floptical_drives_get_crazy_on_the_SCSI_bus_when_an_error_is_found);
UpdateStatus?.Invoke(Localization.Core
.INSITE_floptical_drives_get_crazy_on_the_SCSI_bus_when_an_error_is_found);
@@ -227,7 +225,7 @@ partial class Dump
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}

View File

@@ -98,7 +98,7 @@ partial class Dump
};
}
_dumpLog.WriteLine(Localization.Core.Initializing_reader);
AaruLogging.WriteLine(Localization.Core.Initializing_reader);
var scsiReader = new Reader(_dev, _dev.Timeout, null, _errorLog, _dumpRaw);
ulong blocks = scsiReader.GetDeviceBlocks();
uint blockSize = scsiReader.LogicalBlockSize;
@@ -121,7 +121,6 @@ partial class Dump
if(!sense)
{
_dumpLog.WriteLine(Localization.Core.Requesting_MODE_SENSE_10);
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_10);
sense = _dev.ModeSense10(out cmdBuf,
@@ -156,7 +155,6 @@ partial class Dump
}
}
_dumpLog.WriteLine(Localization.Core.Requesting_MODE_SENSE_6);
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_6);
sense = _dev.ModeSense6(out cmdBuf,
@@ -229,9 +227,6 @@ partial class Dump
// SonicStage changes the device mode, so it is no longer a mass storage device, and can only read
// tracks written by that same application ID (changes between computers).
case MediaType.MD:
_dumpLog.WriteLine(Localization.Core
.MiniDisc_albums_NetMD_discs_or_user_written_audio_MiniDisc_cannot_be_dumped);
StoppingErrorMessage?.Invoke(Localization.Core
.MiniDisc_albums_NetMD_discs_or_user_written_audio_MiniDisc_cannot_be_dumped);
@@ -244,7 +239,7 @@ partial class Dump
if(scsiReader.FindReadCommand())
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_find_correct_read_command_0, scsiReader.ErrorMessage);
AaruLogging.WriteLine(Localization.Core.ERROR_Cannot_find_correct_read_command_0, scsiReader.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Unable_to_read_medium);
return;
@@ -263,7 +258,7 @@ partial class Dump
// Check how many blocks to read, if error show and return
if(scsiReader.GetBlocksToRead(_maximumReadable))
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_get_blocks_to_read_0, scsiReader.ErrorMessage);
AaruLogging.WriteLine(Localization.Core.ERROR_Cannot_get_blocks_to_read_0, scsiReader.ErrorMessage);
StoppingErrorMessage?.Invoke(scsiReader.ErrorMessage);
return;
@@ -275,7 +270,7 @@ partial class Dump
if(blocks == 0)
{
_dumpLog.WriteLine(Localization.Core.ERROR_Unable_to_read_medium_or_empty_medium_present);
AaruLogging.WriteLine(Localization.Core.ERROR_Unable_to_read_medium_or_empty_medium_present);
StoppingErrorMessage?.Invoke(Localization.Core.Unable_to_read_medium_or_empty_medium_present);
return;
@@ -297,16 +292,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.SCSI_floppy_mode_page_present_0, containsFloppyPage));
UpdateStatus?.Invoke(string.Format(Localization.Core.Media_identified_as_0, dskType));
_dumpLog.WriteLine(Localization.Core.Device_reports_0_blocks_1_bytes, blocks, blocks * blockSize);
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_at_a_time, blocksToRead);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_logical_block, blockSize);
_dumpLog.WriteLine(Localization.Core.Device_reports_0_bytes_per_physical_block, scsiReader.LongBlockSize);
_dumpLog.WriteLine(Localization.Core.SCSI_device_type_0, _dev.ScsiType);
_dumpLog.WriteLine(Localization.Core.SCSI_medium_type_0, scsiMediumType);
_dumpLog.WriteLine(Localization.Core.SCSI_density_type_0, scsiDensityCode);
_dumpLog.WriteLine(Localization.Core.SCSI_floppy_mode_page_present_0, containsFloppyPage);
_dumpLog.WriteLine(Localization.Core.Media_identified_as_0, dskType);
uint longBlockSize = scsiReader.LongBlockSize;
if(_dumpRaw)
@@ -356,20 +341,15 @@ partial class Dump
foreach(MediaTagType tag in mediaTags.Keys.Where(tag => !outputFormat.SupportedMediaTags.Contains(tag)))
{
ret = false;
_dumpLog.WriteLine(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
ErrorMessage?.Invoke(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
}
if(!ret)
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_continuing);
ErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_not_continuing);
return;
@@ -377,7 +357,6 @@ partial class Dump
}
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin",
_dev,
@@ -397,9 +376,6 @@ partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -444,17 +420,11 @@ partial class Dump
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core
.Image_does_not_support_multiple_sessions_in_non_Compact_Disc_dumps_continuing);
ErrorMessage?.Invoke(Localization.Core
.Image_does_not_support_multiple_sessions_in_non_Compact_Disc_dumps_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core
.Image_does_not_support_multiple_sessions_in_non_Compact_Disc_dumps_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Image_does_not_support_multiple_sessions_in_non_Compact_Disc_dumps_not_continuing);
@@ -468,17 +438,11 @@ partial class Dump
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core
.Image_does_not_support_multiple_tracks_in_non_Compact_Disc_dumps_continuing);
ErrorMessage?.Invoke(Localization.Core
.Image_does_not_support_multiple_tracks_in_non_Compact_Disc_dumps_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core
.Image_does_not_support_multiple_tracks_in_non_Compact_Disc_dumps_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
.Image_does_not_support_multiple_tracks_in_non_Compact_Disc_dumps_not_continuing);
@@ -487,7 +451,6 @@ partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Building_track_map);
_dumpLog.WriteLine(Localization.Core.Building_track_map);
List<Track> tracks = [];
@@ -557,9 +520,6 @@ partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -586,11 +546,6 @@ partial class Dump
if(!ret)
{
_dumpLog.WriteLine(Localization.Core
.Error_sending_tracks_to_output_image_not_continuing);
_dumpLog.WriteLine(opticalPlugin.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core
.Error_sending_tracks_to_output_image_not_continuing +
Environment.NewLine +
@@ -619,8 +574,6 @@ partial class Dump
}
else
{
_dumpLog.WriteLine(Localization.Core.The_specified_image_format_cannot_represent_optical_discs);
StoppingErrorMessage?.Invoke(Localization.Core
.The_specified_image_format_cannot_represent_optical_discs);
@@ -641,12 +594,6 @@ partial class Dump
if(!rigidPage.HasValue || setGeometry) continue;
_dumpLog.WriteLine(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
rigidPage.Value.Cylinders,
rigidPage.Value.Heads,
(uint)(blocks / (rigidPage.Value.Cylinders * rigidPage.Value.Heads)));
UpdateStatus?.Invoke(string.Format(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
rigidPage.Value.Cylinders,
@@ -669,12 +616,6 @@ partial class Dump
if(!flexiblePage.HasValue) continue;
_dumpLog.WriteLine(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
flexiblePage.Value.Cylinders,
flexiblePage.Value.Heads,
flexiblePage.Value.SectorsPerTrack);
UpdateStatus?.Invoke(string.Format(Localization.Core
.Setting_geometry_to_0_cylinders_1_heads_2_sectors_per_track,
flexiblePage.Value.Cylinders,
@@ -700,9 +641,6 @@ partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -712,8 +650,6 @@ partial class Dump
if(writeSingleOpticalTrack)
{
_dumpLog.WriteLine(Localization.Core.Creating_single_track_as_could_not_retrieve_track_list_from_drive);
UpdateStatus?.Invoke(Localization.Core
.Creating_single_track_as_could_not_retrieve_track_list_from_drive);
@@ -781,24 +717,15 @@ partial class Dump
}
if(_resume.NextBlock > 0)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Resuming_from_block_0, _resume.NextBlock));
_dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
}
// Set speed
if(_speedMultiplier >= 0)
{
if(_speed == 0)
{
_dumpLog.WriteLine(Localization.Core.Setting_speed_to_MAX);
UpdateStatus?.Invoke(Localization.Core.Setting_speed_to_MAX);
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Setting_speed_to_0_x, _speed));
UpdateStatus?.Invoke(string.Format(Localization.Core.Setting_speed_to_0_x, _speed));
}
_speed *= _speedMultiplier;
@@ -906,18 +833,6 @@ partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Trimming
@@ -927,7 +842,6 @@ partial class Dump
{
_trimStopwatch.Restart();
UpdateStatus?.Invoke(Localization.Core.Trimming_skipped_sectors);
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
InitProgress?.Invoke();
@@ -939,9 +853,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_trimStopwatch.Stop();
}
@@ -984,10 +895,6 @@ partial class Dump
// Cannot write tag to image
StoppingErrorMessage?.Invoke(string.Format(Localization.Core.Cannot_write_tag_0, tag.Key));
_dumpLog.WriteLine(string.Format(Localization.Core.Cannot_write_tag_0, tag.Key) +
Environment.NewLine +
outputFormat.ErrorMessage);
return;
}
}
@@ -998,13 +905,10 @@ partial class Dump
if(_dev.IsUsb && _dev.UsbDescriptors != null)
{
UpdateStatus?.Invoke(Localization.Core.Reading_USB_descriptors);
_dumpLog.WriteLine(Localization.Core.Reading_USB_descriptors);
ret = outputFormat.WriteMediaTag(_dev.UsbDescriptors, MediaTagType.USB_Descriptors);
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_USB_descriptors);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_USB_descriptors +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -1018,7 +922,6 @@ partial class Dump
if(_dev.Type == DeviceType.ATAPI)
{
UpdateStatus?.Invoke(Localization.Core.Requesting_ATAPI_IDENTIFY_PACKET_DEVICE);
_dumpLog.WriteLine(Localization.Core.Requesting_ATAPI_IDENTIFY_PACKET_DEVICE);
sense = _dev.AtapiIdentify(out cmdBuf, out _);
if(!sense)
@@ -1029,8 +932,6 @@ partial class Dump
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_ATAPI_IDENTIFY_PACKET_DEVICE);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_ATAPI_IDENTIFY_PACKET_DEVICE +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -1045,22 +946,16 @@ partial class Dump
if(!sense)
{
UpdateStatus?.Invoke(Localization.Core.Requesting_SCSI_INQUIRY);
_dumpLog.WriteLine(Localization.Core.Requesting_SCSI_INQUIRY);
ret = outputFormat.WriteMediaTag(cmdBuf, MediaTagType.SCSI_INQUIRY);
if(!ret && !_force)
{
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_SCSI_INQUIRY);
_dumpLog.WriteLine(Localization.Core.Cannot_write_SCSI_INQUIRY +
Environment.NewLine +
outputFormat.ErrorMessage);
return;
}
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_10);
_dumpLog.WriteLine(Localization.Core.Requesting_MODE_SENSE_10);
sense = _dev.ModeSense10(out cmdBuf,
out _,
@@ -1093,8 +988,6 @@ partial class Dump
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_SCSI_MODE_SENSE_10);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_SCSI_MODE_SENSE_10 +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -1105,7 +998,6 @@ partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_6);
_dumpLog.WriteLine(Localization.Core.Requesting_MODE_SENSE_6);
sense = _dev.ModeSense6(out cmdBuf,
out _,
@@ -1138,8 +1030,6 @@ partial class Dump
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_SCSI_MODE_SENSE_6);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_SCSI_MODE_SENSE_6 +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -1154,7 +1044,8 @@ partial class Dump
_resume.BadBlocks.Sort();
foreach(ulong bad in _resume.BadBlocks) _dumpLog.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
foreach(ulong bad in _resume.BadBlocks)
AaruLogging.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
@@ -1177,7 +1068,6 @@ partial class Dump
if(_preSidecar != null) outputFormat.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputFormat.Close();
@@ -1186,13 +1076,9 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}
@@ -1207,7 +1093,6 @@ partial class Dump
else
{
UpdateStatus?.Invoke(Localization.Core.Creating_sidecar);
_dumpLog.WriteLine(Localization.Core.Creating_sidecar);
IFilter filter = PluginRegister.Singleton.GetFilter(_outputPath);
var inputPlugin = ImageFormat.Detect(filter) as IMediaImage;
ErrorNumber opened = inputPlugin.Open(filter);
@@ -1244,14 +1129,6 @@ partial class Dump
.Per(totalChkDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
if(_preSidecar != null)
{
_preSidecar.BlockMedias = sidecar.BlockMedias;
@@ -1354,7 +1231,6 @@ partial class Dump
*/
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_10);
_dumpLog.WriteLine(Localization.Core.Requesting_MODE_SENSE_10);
sense = _dev.ModeSense10(out cmdBuf,
out _,
@@ -1396,7 +1272,6 @@ partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Requesting_MODE_SENSE_6);
_dumpLog.WriteLine(Localization.Core.Requesting_MODE_SENSE_6);
sense = _dev.ModeSense6(out cmdBuf,
out _,
@@ -1461,10 +1336,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start));
_dumpLog.WriteLine(Localization.Core.Found_filesystem_0_at_sector_1,
filesystem.type,
filesystem.start);
}
}

View File

@@ -223,7 +223,6 @@ partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
sense = _dev.ModeSelect(md6, out byte[] senseBuf, true, false, _dev.Timeout, out _);
if(sense) sense = _dev.ModeSelect10(md10, out senseBuf, true, false, _dev.Timeout, out _);
@@ -234,9 +233,6 @@ partial class Dump
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
AaruLogging.Debug(Localization.Core.Error_0, Sense.PrettifySense(senseBuf));
_dumpLog.WriteLine(Localization.Core
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
}
else
runningPersistent = true;
@@ -252,7 +248,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -303,7 +298,6 @@ partial class Dump
newBlank = true;
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_blank_block_0_in_pass_1, badSector, pass));
_dumpLog.WriteLine(Localization.Core.Found_blank_block_0_in_pass_1, badSector, pass);
continue;
}
@@ -363,8 +357,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1, badSector, pass);
}
else if(runningPersistent) outputFormat.WriteSector(buffer, badSector);
}
@@ -392,7 +384,6 @@ partial class Dump
md10 = Modes.EncodeMode10(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
sense = _dev.ModeSelect(md6, out _, true, false, _dev.Timeout, out _);
if(sense) _dev.ModeSelect10(md10, out _, true, false, _dev.Timeout, out _);
@@ -422,7 +413,6 @@ partial class Dump
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -465,8 +455,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_title_key_0_in_pass_1,
missingKey,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_title_key_0_in_pass_1, missingKey, pass);
}
else
{
@@ -482,8 +470,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_title_key_0_in_pass_1,
missingKey,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_title_key_0_in_pass_1, missingKey, pass);
}
}

View File

@@ -101,7 +101,6 @@ partial class Dump
{
_resume.BlankExtents = null;
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -182,15 +181,13 @@ partial class Dump
writtenExtents.Add(0, blocks - 1);
foreach(Tuple<ulong, ulong> blank in blankExtents.ToArray())
{
for(ulong b = blank.Item1; b <= blank.Item2; b++) writtenExtents.Remove(b);
}
for(ulong b = blank.Item1; b <= blank.Item2; b++)
writtenExtents.Remove(b);
}
if(writtenExtents.Count == 0)
{
UpdateStatus?.Invoke(Localization.Core.Cannot_dump_empty_media);
_dumpLog.WriteLine(Localization.Core.Cannot_dump_empty_media);
return;
}
@@ -215,7 +212,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -262,7 +258,7 @@ partial class Dump
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}

View File

@@ -44,14 +44,15 @@ partial class Dump
/// <param name="extents">Correctly dump extents</param>
/// <param name="currentTry">Resume information</param>
/// <param name="blankExtents">Blank extents</param>
void TrimSbcData(Reader scsiReader, ExtentsULong extents, DumpHardware currentTry, ExtentsULong blankExtents, byte[] discKey)
void TrimSbcData(Reader scsiReader, ExtentsULong extents, DumpHardware currentTry, ExtentsULong blankExtents,
byte[] discKey)
{
ulong[] tmpArray = _resume.BadBlocks.ToArray();
bool sense;
bool recoveredError;
bool blankCheck;
byte[] buffer;
var newBlank = false;
bool newBlank = false;
if(_outputPlugin is not IWritableImage outputFormat)
{
@@ -66,7 +67,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -82,7 +82,6 @@ partial class Dump
_resume.BadBlocks.Remove(badSector);
UpdateStatus?.Invoke(string.Format(Localization.Core.Found_blank_block_0, badSector));
_dumpLog.WriteLine(Localization.Core.Found_blank_block_0, badSector);
continue;
}

View File

@@ -46,6 +46,7 @@ using Aaru.Core.Graphics;
using Aaru.Core.Logging;
using Aaru.Decoders.MMC;
using Aaru.Decoders.SecureDigital;
using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using Humanizer.Localisation;
@@ -86,9 +87,9 @@ public partial class Dump
byte[] ecsd = null;
byte[] scr = null;
uint physicalBlockSize = 0;
var byteAddressed = true;
bool byteAddressed = true;
uint[] response;
var supportsCmd23 = false;
bool supportsCmd23 = false;
var outputFormat = _outputPlugin as IWritableImage;
Dictionary<MediaTagType, byte[]> mediaTags = new();
@@ -98,7 +99,6 @@ public partial class Dump
case DeviceType.MMC:
{
UpdateStatus?.Invoke(Localization.Core.Reading_CSD);
_dumpLog.WriteLine(Localization.Core.Reading_CSD);
sense = _dev.ReadCsd(out csd, out response, timeout, out duration);
if(!sense)
@@ -115,7 +115,6 @@ public partial class Dump
if(csdDecoded.Size == 0xFFF)
{
UpdateStatus?.Invoke(Localization.Core.Reading_Extended_CSD);
_dumpLog.WriteLine(Localization.Core.Reading_Extended_CSD);
sense = _dev.ReadExtendedCsd(out ecsd, out response, timeout, out duration);
if(!sense)
@@ -153,7 +152,6 @@ public partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Reading_OCR);
_dumpLog.WriteLine(Localization.Core.Reading_OCR);
sense = _dev.ReadOcr(out ocr, out response, timeout, out duration);
if(sense)
@@ -170,7 +168,6 @@ public partial class Dump
case DeviceType.SecureDigital:
{
UpdateStatus?.Invoke(Localization.Core.Reading_CSD);
_dumpLog.WriteLine(Localization.Core.Reading_CSD);
sense = _dev.ReadCsd(out csd, out response, timeout, out duration);
if(!sense)
@@ -203,7 +200,6 @@ public partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Reading_OCR);
_dumpLog.WriteLine(Localization.Core.Reading_OCR);
sense = _dev.ReadSdocr(out ocr, out response, timeout, out duration);
if(sense)
@@ -215,7 +211,6 @@ public partial class Dump
mediaTags.Add(MediaTagType.SD_OCR, null);
UpdateStatus?.Invoke(Localization.Core.Reading_SCR);
_dumpLog.WriteLine(Localization.Core.Reading_SCR);
sense = _dev.ReadScr(out scr, out response, timeout, out duration);
if(sense)
@@ -237,7 +232,6 @@ public partial class Dump
}
UpdateStatus?.Invoke(Localization.Core.Reading_CID);
_dumpLog.WriteLine(Localization.Core.Reading_CID);
sense = _dev.ReadCid(out byte[] cid, out response, timeout, out duration);
if(sense)
@@ -255,14 +249,12 @@ public partial class Dump
if(blocks == 0)
{
_dumpLog.WriteLine(Localization.Core.Unable_to_get_device_size);
StoppingErrorMessage?.Invoke(Localization.Core.Unable_to_get_device_size);
return;
}
UpdateStatus?.Invoke(string.Format(Localization.Core.Device_reports_0_blocks, blocks));
_dumpLog.WriteLine(Localization.Core.Device_reports_0_blocks, blocks);
byte[] cmdBuf;
bool error;
@@ -306,8 +298,6 @@ public partial class Dump
if(error)
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_get_blocks_to_read_device_error_0, _dev.LastError);
StoppingErrorMessage?.Invoke(string.Format(Localization.Core
.Device_error_0_trying_to_guess_ideal_transfer_length,
_dev.LastError));
@@ -333,7 +323,6 @@ public partial class Dump
if(error)
{
UpdateStatus?.Invoke(Localization.Core.DumBuffered_OS_reads_are_not_working_trying_direct_commands);
_dumpLog.WriteLine(Localization.Core.DumBuffered_OS_reads_are_not_working_trying_direct_commands);
blocksToRead = 1;
_useBufferedReads = false;
}
@@ -362,8 +351,6 @@ public partial class Dump
if(error)
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_get_blocks_to_read_device_error_0, _dev.LastError);
StoppingErrorMessage?.Invoke(string.Format(Localization.Core
.Device_error_0_trying_to_guess_ideal_transfer_length,
_dev.LastError));
@@ -378,8 +365,6 @@ public partial class Dump
if(error)
{
_dumpLog.WriteLine(Localization.Core.ERROR_Could_not_read_from_device_device_error_0, _dev.LastError);
StoppingErrorMessage?.Invoke(string.Format(Localization.Core.Device_error_0_trying_to_read_from_device,
_dev.LastError));
@@ -388,25 +373,17 @@ public partial class Dump
}
if(supportsCmd23 || blocksToRead == 1)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Device_can_read_0_blocks_at_a_time, blocksToRead));
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_at_a_time, blocksToRead);
}
else if(_useBufferedReads)
{
UpdateStatus?.Invoke(string.Format(Localization.Core
.Device_can_read_0_blocks_at_a_time_using_OS_buffered_reads,
blocksToRead));
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_at_a_time_using_OS_buffered_reads,
blocksToRead);
}
else
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Device_can_read_0_blocks_using_sequential_commands,
blocksToRead));
_dumpLog.WriteLine(Localization.Core.Device_can_read_0_blocks_using_sequential_commands, blocksToRead);
}
if(_skip < blocksToRead) _skip = blocksToRead;
@@ -435,25 +412,20 @@ public partial class Dump
return;
}
var ret = true;
bool ret = true;
foreach(MediaTagType tag in mediaTags.Keys.Where(tag => !outputFormat.SupportedMediaTags.Contains(tag)))
{
ret = false;
_dumpLog.WriteLine(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
ErrorMessage?.Invoke(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
}
if(!ret)
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_continuing);
ErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_not_continuing);
return;
@@ -479,9 +451,6 @@ public partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -522,8 +491,6 @@ public partial class Dump
// Cannot write CID to image
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_CID_to_output_image);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_CID_to_output_image +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -542,8 +509,6 @@ public partial class Dump
// Cannot write CSD to image
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_CSD_to_output_image);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_CSD_to_output_image +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -559,8 +524,6 @@ public partial class Dump
// Cannot write Extended CSD to image
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_Extended_CSD_to_output_image);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_Extended_CSD_to_output_image +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -579,8 +542,6 @@ public partial class Dump
// Cannot write OCR to image
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_OCR_to_output_image);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_OCR_to_output_image +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -596,8 +557,6 @@ public partial class Dump
// Cannot write SCR to image
if(!ret && !_force)
{
_dumpLog.WriteLine(Localization.Core.Cannot_write_SCR_to_output_image);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_write_SCR_to_output_image +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -607,10 +566,7 @@ public partial class Dump
}
if(_resume.NextBlock > 0)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Resuming_from_block_0, _resume.NextBlock));
_dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
}
if(_createGraph)
{
@@ -636,7 +592,7 @@ public partial class Dump
_dumpStopwatch.Restart();
_speedStopwatch.Reset();
double imageWriteDuration = 0;
var newTrim = false;
bool newTrim = false;
ulong sectorSpeedStart = 0;
InitProgress?.Invoke();
@@ -647,7 +603,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -728,7 +683,7 @@ public partial class Dump
_writeStopwatch.Restart();
outputFormat.WriteSectors(new byte[blockSize * _skip], i, _skip);
imageWriteDuration += _writeStopwatch.Elapsed.TotalSeconds;
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
}
@@ -774,18 +729,6 @@ public partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Trimming
@@ -793,7 +736,6 @@ public partial class Dump
{
_trimStopwatch.Restart();
UpdateStatus?.Invoke(Localization.Core.Trimming_skipped_sectors);
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
ulong[] tmpArray = _resume.BadBlocks.ToArray();
InitProgress?.Invoke();
@@ -804,7 +746,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -839,9 +780,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
#endregion Trimming
@@ -850,8 +788,8 @@ public partial class Dump
if(_resume.BadBlocks.Count > 0 && !_aborted && _retryPasses > 0)
{
var pass = 1;
var forward = true;
int pass = 1;
bool forward = true;
InitProgress?.Invoke();
repeatRetryLba:
@@ -863,7 +801,6 @@ public partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -901,8 +838,6 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1, badSector, pass);
}
if(pass < _retryPasses && !_aborted && _resume.BadBlocks.Count > 0)
@@ -941,7 +876,6 @@ public partial class Dump
if(_preSidecar != null) outputFormat.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputFormat.Close();
@@ -950,13 +884,10 @@ public partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}
@@ -966,7 +897,6 @@ public partial class Dump
if(_metadata)
{
UpdateStatus?.Invoke(Localization.Core.Creating_sidecar);
_dumpLog.WriteLine(Localization.Core.Creating_sidecar);
IFilter filter = PluginRegister.Singleton.GetFilter(_outputPath);
var inputPlugin = ImageFormat.Detect(filter) as IMediaImage;
ErrorNumber opened = inputPlugin.Open(filter);
@@ -1004,14 +934,6 @@ public partial class Dump
.Per(totalChkDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
(string type, string subType) xmlType = (null, null);
switch(_dev.Type)

View File

@@ -91,9 +91,8 @@ partial class Dump
if(!isAdmin)
{
AaruLogging.Error(Localization.Core
.Because_of_commands_sent_dumping_XGD_must_be_administrative_Cannot_continue);
.Because_of_commands_sent_dumping_XGD_must_be_administrative_Cannot_continue);
_dumpLog.WriteLine(Localization.Core.Cannot_dump_XGD_without_administrative_privileges);
return;
}
@@ -108,7 +107,6 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_disc_capacity);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_disc_capacity);
return;
@@ -127,31 +125,26 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_PFI);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_PFI);
return;
}
UpdateStatus?.Invoke(Localization.Core.Reading_Xbox_Security_Sector);
_dumpLog.WriteLine(Localization.Core.Reading_Xbox_Security_Sector);
sense = _dev.KreonExtractSs(out byte[] ssBuf, out senseBuf, _dev.Timeout, out _);
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_Xbox_Security_Sector_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_Xbox_Security_Sector_not_continuing);
return;
}
_dumpLog.WriteLine(Localization.Core.Decoding_Xbox_Security_Sector);
UpdateStatus?.Invoke(Localization.Core.Decoding_Xbox_Security_Sector);
SS.SecuritySector? xboxSs = SS.Decode(ssBuf);
if(!xboxSs.HasValue)
{
_dumpLog.WriteLine(Localization.Core.Cannot_decode_Xbox_Security_Sector_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_decode_Xbox_Security_Sector_not_continuing);
return;
@@ -164,26 +157,22 @@ partial class Dump
// Get video partition size
AaruLogging.Debug(MODULE_NAME, Localization.Core.Getting_video_partition_size);
UpdateStatus?.Invoke(Localization.Core.Locking_drive);
_dumpLog.WriteLine(Localization.Core.Locking_drive);
sense = _dev.KreonLock(out senseBuf, _dev.Timeout, out _);
if(sense)
{
_errorLog?.WriteLine("Kreon lock", _dev.Error, _dev.LastError, senseBuf);
_dumpLog.WriteLine(Localization.Core.Cannot_lock_drive_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_lock_drive_not_continuing);
return;
}
UpdateStatus?.Invoke(Localization.Core.Getting_video_partition_size);
_dumpLog.WriteLine(Localization.Core.Getting_video_partition_size);
sense = _dev.ReadCapacity(out byte[] readBuffer, out senseBuf, _dev.Timeout, out _);
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_disc_capacity);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_disc_capacity);
return;
@@ -193,7 +182,6 @@ partial class Dump
(ulong)((readBuffer[0] << 24) + (readBuffer[1] << 16) + (readBuffer[2] << 8) + readBuffer[3]) & 0xFFFFFFFF;
UpdateStatus?.Invoke(Localization.Core.Reading_Physical_Format_Information);
_dumpLog.WriteLine(Localization.Core.Reading_Physical_Format_Information);
sense = _dev.ReadDiscStructure(out readBuffer,
out senseBuf,
@@ -207,7 +195,6 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_PFI);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_PFI);
return;
@@ -225,7 +212,6 @@ partial class Dump
ulong l1Video = totalSize - l0Video + 1;
UpdateStatus?.Invoke(Localization.Core.Reading_Disc_Manufacturing_Information);
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Manufacturing_Information);
sense = _dev.ReadDiscStructure(out readBuffer,
out senseBuf,
@@ -239,7 +225,6 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_DMI);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_DMI);
return;
@@ -253,7 +238,6 @@ partial class Dump
if(totalSize > 300000)
{
UpdateStatus?.Invoke(Localization.Core.Video_partition_is_too_big_did_lock_work_Trying_cold_values);
_dumpLog.WriteLine(Localization.Core.Video_partition_is_too_big_did_lock_work_Trying_cold_values);
totalSize = (ulong)((coldReadCapacity[0] << 24) +
(coldReadCapacity[1] << 16) +
@@ -276,8 +260,6 @@ partial class Dump
if(totalSize > 300000)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_video_partition_size_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_video_partition_size_not_continuing);
return;
@@ -287,25 +269,21 @@ partial class Dump
// Get game partition size
AaruLogging.Debug(MODULE_NAME, Localization.Core.Getting_game_partition_size);
UpdateStatus?.Invoke(Localization.Core.Unlocking_drive_Xtreme_);
_dumpLog.WriteLine(Localization.Core.Unlocking_drive_Xtreme_);
sense = _dev.KreonUnlockXtreme(out senseBuf, _dev.Timeout, out _);
if(sense)
{
_errorLog?.WriteLine("Kreon Xtreme unlock", _dev.Error, _dev.LastError, senseBuf);
_dumpLog.WriteLine(Localization.Core.Cannot_unlock_drive_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_unlock_drive_not_continuing);
return;
}
UpdateStatus?.Invoke(Localization.Core.Getting_game_partition_size);
_dumpLog.WriteLine(Localization.Core.Getting_game_partition_size);
sense = _dev.ReadCapacity(out readBuffer, out senseBuf, _dev.Timeout, out _);
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_disc_capacity);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_disc_capacity);
return;
@@ -321,25 +299,21 @@ partial class Dump
// Get middle zone size
AaruLogging.Debug(MODULE_NAME, Localization.Core.Getting_middle_zone_size);
UpdateStatus?.Invoke(Localization.Core.Unlocking_drive_Wxripper);
_dumpLog.WriteLine(Localization.Core.Unlocking_drive_Wxripper);
sense = _dev.KreonUnlockWxripper(out senseBuf, _dev.Timeout, out _);
if(sense)
{
_errorLog?.WriteLine("Kreon Wxripper unlock", _dev.Error, _dev.LastError, senseBuf);
_dumpLog.WriteLine(Localization.Core.Cannot_unlock_drive_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_unlock_drive_not_continuing);
return;
}
UpdateStatus?.Invoke(Localization.Core.Getting_disc_size);
_dumpLog.WriteLine(Localization.Core.Getting_disc_size);
sense = _dev.ReadCapacity(out readBuffer, out senseBuf, _dev.Timeout, out _);
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_disc_capacity);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_disc_capacity);
return;
@@ -349,7 +323,6 @@ partial class Dump
0xFFFFFFFF;
UpdateStatus?.Invoke(Localization.Core.Reading_Physical_Format_Information);
_dumpLog.WriteLine(Localization.Core.Reading_Physical_Format_Information);
sense = _dev.ReadDiscStructure(out readBuffer,
out senseBuf,
@@ -363,7 +336,6 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_PFI);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_PFI);
return;
@@ -376,7 +348,6 @@ partial class Dump
if(wxRipperPfiNullable == null)
{
_dumpLog.WriteLine(Localization.Core.Cannot_decode_PFI);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_decode_PFI);
return;
@@ -391,11 +362,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.WxRipper_PFI_Layer_0_End_PSN_0_sectors,
wxRipperPfi.Layer0EndPSN));
_dumpLog.WriteLine(string.Format(Localization.Core.WxRipper_PFI_Data_Area_Start_PSN_0_sectors,
wxRipperPfi.DataAreaStartPSN));
_dumpLog.WriteLine(string.Format(Localization.Core.WxRipper_PFI_Layer_0_End_PSN_0_sectors,
wxRipperPfi.Layer0EndPSN));
ulong middleZone = totalSize - (wxRipperPfi.Layer0EndPSN - wxRipperPfi.DataAreaStartPSN + 1) - gameSize + 1;
@@ -404,7 +370,6 @@ partial class Dump
mediaTags.Add(MediaTagType.Xbox_PFI, tmpBuf);
UpdateStatus?.Invoke(Localization.Core.Reading_Disc_Manufacturing_Information);
_dumpLog.WriteLine(Localization.Core.Reading_Disc_Manufacturing_Information);
sense = _dev.ReadDiscStructure(out readBuffer,
out senseBuf,
@@ -418,7 +383,6 @@ partial class Dump
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_get_DMI);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_get_DMI);
return;
@@ -439,13 +403,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Real_layer_break_0, layerBreak));
UpdateStatus?.Invoke("");
_dumpLog.WriteLine(Localization.Core.Video_layer_0_size_0_sectors, l0Video);
_dumpLog.WriteLine(Localization.Core.Video_layer_1_size_0_sectors, l1Video);
_dumpLog.WriteLine(Localization.Core.Middle_zone_size_0_sectors, middleZone);
_dumpLog.WriteLine(Localization.Core.Game_data_size_0_sectors, gameSize);
_dumpLog.WriteLine(Localization.Core.Total_size_0_sectors, totalSize);
_dumpLog.WriteLine(Localization.Core.Real_layer_break_0, layerBreak);
bool read12 = !_dev.Read12(out readBuffer,
out senseBuf,
0,
@@ -463,28 +420,20 @@ partial class Dump
if(!read12)
{
_dumpLog.WriteLine(Localization.Core.Cannot_read_medium_aborting_scan);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_read_medium_aborting_scan);
return;
}
_dumpLog.WriteLine(Localization.Core.Using_SCSI_READ_12_command);
UpdateStatus?.Invoke(Localization.Core.Using_SCSI_READ_12_command);
// Set speed
if(_speedMultiplier >= 0)
{
if(_speed == 0)
{
_dumpLog.WriteLine(Localization.Core.Setting_speed_to_MAX);
UpdateStatus?.Invoke(Localization.Core.Setting_speed_to_MAX);
}
else
{
_dumpLog.WriteLine(string.Format(Localization.Core.Setting_speed_to_0_x, _speed));
UpdateStatus?.Invoke(string.Format(Localization.Core.Setting_speed_to_0_x, _speed));
}
_speed *= _speedMultiplier;
@@ -517,8 +466,6 @@ partial class Dump
if(_dev.Error)
{
_dumpLog.WriteLine(Localization.Core.Device_error_0_trying_to_guess_ideal_transfer_length, _dev.LastError);
StoppingErrorMessage?.Invoke(string.Format(Localization.Core
.Device_error_0_trying_to_guess_ideal_transfer_length,
_dev.LastError));
@@ -533,27 +480,21 @@ partial class Dump
foreach(MediaTagType tag in mediaTags.Keys.Where(tag => !outputFormat.SupportedMediaTags.Contains(tag)))
{
ret = false;
_dumpLog.WriteLine(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
ErrorMessage?.Invoke(string.Format(Localization.Core.Output_format_does_not_support_0, tag));
}
if(!ret)
{
if(_force)
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_continuing);
ErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_continuing);
}
else
{
_dumpLog.WriteLine(Localization.Core.Several_media_tags_not_supported_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Several_media_tags_not_supported_not_continuing);
return;
}
}
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin",
@@ -570,9 +511,6 @@ partial class Dump
// Cannot create image
if(!ret)
{
_dumpLog.WriteLine(Localization.Core.Error_creating_output_image_not_continuing);
_dumpLog.WriteLine(outputFormat.ErrorMessage);
StoppingErrorMessage?.Invoke(Localization.Core.Error_creating_output_image_not_continuing +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -639,14 +577,10 @@ partial class Dump
ulong currentSector = _resume.NextBlock;
if(_resume.NextBlock > 0)
{
UpdateStatus?.Invoke(string.Format(Localization.Core.Resuming_from_block_0, _resume.NextBlock));
_dumpLog.WriteLine(Localization.Core.Resuming_from_block_0, _resume.NextBlock);
}
bool newTrim = false;
_dumpLog.WriteLine(Localization.Core.Reading_game_partition);
UpdateStatus?.Invoke(Localization.Core.Reading_game_partition);
_speedStopwatch.Reset();
ulong sectorSpeedStart = 0;
@@ -659,7 +593,6 @@ partial class Dump
_resume.NextBlock = currentSector;
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -707,7 +640,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -772,21 +704,19 @@ partial class Dump
for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b);
AaruLogging.Debug(MODULE_NAME,
Localization.Core.READ_error_0,
Sense.PrettifySense(senseBuf));
AaruLogging.Debug(MODULE_NAME, Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf));
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
string[] senseLines = Sense.PrettifySense(senseBuf)
.Split([Environment.NewLine], StringSplitOptions.RemoveEmptyEntries);
foreach(string senseLine in senseLines) _dumpLog.WriteLine(senseLine);
foreach(string senseLine in senseLines) AaruLogging.WriteLine(senseLine);
newTrim = true;
}
@@ -816,7 +746,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -847,7 +776,6 @@ partial class Dump
// Middle Zone D
UpdateStatus?.Invoke(Localization.Core.Writing_Middle_Zone_D_empty);
_dumpLog.WriteLine(Localization.Core.Writing_Middle_Zone_D_empty);
InitProgress?.Invoke();
for(ulong middle = currentSector - blocks - 1; middle < middleZone - 1; middle += blocksToRead)
@@ -856,7 +784,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -889,12 +816,10 @@ partial class Dump
blocksToRead = saveBlocksToRead;
UpdateStatus?.Invoke(Localization.Core.Locking_drive);
_dumpLog.WriteLine(Localization.Core.Locking_drive);
sense = _dev.KreonLock(out senseBuf, _dev.Timeout, out _);
if(sense)
{
_dumpLog.WriteLine(Localization.Core.Cannot_lock_drive_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_lock_drive_not_continuing);
return;
@@ -910,7 +835,6 @@ partial class Dump
}
// Video Layer 1
_dumpLog.WriteLine(Localization.Core.Reading_Video_Layer_1);
UpdateStatus?.Invoke(Localization.Core.Reading_Video_Layer_1);
InitProgress?.Invoke();
@@ -920,7 +844,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -988,13 +911,13 @@ partial class Dump
mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(l1, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, l1);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, l1);
l1 += _skip - blocksToRead;
string[] senseLines = Sense.PrettifySense(senseBuf)
.Split([Environment.NewLine], StringSplitOptions.RemoveEmptyEntries);
foreach(string senseLine in senseLines) _dumpLog.WriteLine(senseLine);
foreach(string senseLine in senseLines) AaruLogging.WriteLine(senseLine);
}
_writeStopwatch.Stop();
@@ -1015,13 +938,11 @@ partial class Dump
EndProgress?.Invoke();
UpdateStatus?.Invoke(Localization.Core.Unlocking_drive_Wxripper);
_dumpLog.WriteLine(Localization.Core.Unlocking_drive_Wxripper);
sense = _dev.KreonUnlockWxripper(out senseBuf, _dev.Timeout, out _);
if(sense)
{
_errorLog?.WriteLine("Kreon Wxripper unlock", _dev.Error, _dev.LastError, senseBuf);
_dumpLog.WriteLine(Localization.Core.Cannot_unlock_drive_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core.Cannot_unlock_drive_not_continuing);
return;
@@ -1061,26 +982,12 @@ partial class Dump
.Per(imageWriteDuration.Seconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Dump_finished_in_0,
_dumpStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_dump_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalDuration.Milliseconds())
.Humanize()));
_dumpLog.WriteLine(string.Format(Localization.Core.Average_write_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(imageWriteDuration.Seconds())
.Humanize()));
#region Trimming
if(_resume.BadBlocks.Count > 0 && !_aborted && _trim && newTrim)
{
_trimStopwatch.Restart();
UpdateStatus?.Invoke(Localization.Core.Trimming_skipped_sectors);
_dumpLog.WriteLine(Localization.Core.Trimming_skipped_sectors);
ulong[] tmpArray = _resume.BadBlocks.ToArray();
InitProgress?.Invoke();
@@ -1090,7 +997,7 @@ partial class Dump
if(_aborted)
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
_dumpLog.WriteLine(Localization.Core.Aborted);
UpdateStatus?.Invoke(Localization.Core.Aborted);
break;
}
@@ -1132,9 +1039,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
#endregion Trimming
@@ -1146,9 +1050,8 @@ partial class Dump
List<ulong> tmpList = [];
foreach(ulong ur in _resume.BadBlocks)
{
for(ulong i = ur; i < ur + blocksToRead; i++) tmpList.Add(i);
}
for(ulong i = ur; i < ur + blocksToRead; i++)
tmpList.Add(i);
tmpList.Sort();
@@ -1251,7 +1154,6 @@ partial class Dump
md10 = Modes.EncodeMode10(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_damaged_blocks);
sense = _dev.ModeSelect(md6, out senseBuf, true, false, _dev.Timeout, out _);
if(sense) sense = _dev.ModeSelect10(md10, out senseBuf, true, false, _dev.Timeout, out _);
@@ -1262,9 +1164,6 @@ partial class Dump
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
AaruLogging.Debug(Localization.Core.Error_0, Sense.PrettifySense(senseBuf));
_dumpLog.WriteLine(Localization.Core
.Drive_did_not_accept_MODE_SELECT_command_for_persistent_error_reading);
}
else
runningPersistent = true;
@@ -1280,7 +1179,6 @@ partial class Dump
{
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
break;
}
@@ -1337,8 +1235,6 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badSector,
pass));
_dumpLog.WriteLine(Localization.Core.Correctly_retried_block_0_in_pass_1, badSector, pass);
}
else if(runningPersistent) outputFormat.WriteSector(readBuffer, badSector);
}
@@ -1366,7 +1262,6 @@ partial class Dump
md10 = Modes.EncodeMode10(md, _dev.ScsiType);
UpdateStatus?.Invoke(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
_dumpLog.WriteLine(Localization.Core.Sending_MODE_SELECT_to_drive_return_device_to_previous_status);
sense = _dev.ModeSelect(md6, out senseBuf, true, false, _dev.Timeout, out _);
if(sense) _dev.ModeSelect10(md10, out senseBuf, true, false, _dev.Timeout, out _);
@@ -1394,8 +1289,6 @@ partial class Dump
if(ret || _force) continue;
// Cannot write tag to image
_dumpLog.WriteLine(string.Format(Localization.Core.Cannot_write_tag_0, tag.Key));
StoppingErrorMessage?.Invoke(string.Format(Localization.Core.Cannot_write_tag_0, tag.Key) +
Environment.NewLine +
outputFormat.ErrorMessage);
@@ -1405,7 +1298,8 @@ partial class Dump
_resume.BadBlocks.Sort();
foreach(ulong bad in _resume.BadBlocks) _dumpLog.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
foreach(ulong bad in _resume.BadBlocks)
AaruLogging.WriteLine(Localization.Core.Sector_0_could_not_be_read, bad);
currentTry.Extents = ExtentsConverter.ToMetadata(extents);
@@ -1426,7 +1320,6 @@ partial class Dump
if(_preSidecar != null) outputFormat.SetMetadata(_preSidecar);
_dumpLog.WriteLine(Localization.Core.Closing_output_file);
UpdateStatus?.Invoke(Localization.Core.Closing_output_file);
_imageCloseStopwatch.Restart();
outputFormat.Close();
@@ -1435,13 +1328,10 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
_dumpLog.WriteLine(Localization.Core.Closed_in_0,
_imageCloseStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
if(_aborted)
{
UpdateStatus?.Invoke(Localization.Core.Aborted);
_dumpLog.WriteLine(Localization.Core.Aborted);
return;
}