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,7 +126,7 @@ public partial class Dump
if(ataReader.FindReadCommand())
{
_dumpLog.WriteLine(Localization.Core.ERROR_Cannot_find_correct_read_command_0,
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);
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,7 +183,7 @@ sealed partial class Dump
desiredSubchannel = MmcSubchannel.Raw;
else
{
_dumpLog.WriteLine(Localization.Core
AaruLogging.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
@@ -201,7 +200,7 @@ sealed partial class Dump
desiredSubchannel = MmcSubchannel.Q16;
else
{
_dumpLog.WriteLine(Localization.Core
AaruLogging.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
@@ -216,7 +215,7 @@ sealed partial class Dump
desiredSubchannel = MmcSubchannel.Q16;
else
{
_dumpLog.WriteLine(Localization.Core
AaruLogging.WriteLine(Localization.Core
.Drive_does_not_support_the_requested_subchannel_format_not_continuing);
StoppingErrorMessage?.Invoke(Localization.Core
@@ -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) UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_12);
if(read16) UpdateStatus?.Invoke(Localization.Core.Drive_supports_READ_16);
}
if(read12)
{
_dumpLog.WriteLine(Localization.Core.Drive_supports_READ_12);
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);
}
}
_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,7 +1025,7 @@ sealed partial class Dump
if(supportedSubchannel != MmcSubchannel.None)
{
_dumpLog.WriteLine(string.Format(Localization.Core.Creating_subchannel_log_in_0,
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,7 +155,7 @@ 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,
public static void SolveTrackPregaps(Device dev, UpdateStatusHandler updateStatus, Track[] tracks,
bool supportsPqSubchannel, bool supportsRwSubchannel,
Database.Models.Device dbDev, out bool inexactPositioning, bool dumping)
{
@@ -199,9 +194,6 @@ partial class Dump
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);
@@ -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));
}
@@ -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,8 +59,8 @@ 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,
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)
{
@@ -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>
@@ -168,13 +166,13 @@ public partial class Dump
/// <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)
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);
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;
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,7 +399,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,
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,
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,10 +98,10 @@ partial class Dump
totalChkDuration = _sidecarStopwatch.Elapsed.TotalMilliseconds;
_dumpLog.WriteLine(Localization.Core.Sidecar_created_in_0,
AaruLogging.WriteLine(Localization.Core.Sidecar_created_in_0,
_sidecarStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
_dumpLog.WriteLine(Localization.Core.Average_checksum_speed_0,
AaruLogging.WriteLine(Localization.Core.Average_checksum_speed_0,
ByteSize.FromBytes(blockSize * (blocks + 1))
.Per(totalChkDuration.Milliseconds())
.Humanize());
@@ -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,7 +370,7 @@ public partial class Dump
EndProgress?.Invoke();
_trimStopwatch.Stop();
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
AaruLogging.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
@@ -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,7 +407,7 @@ public partial class Dump
EndProgress?.Invoke();
_trimStopwatch.Stop();
_dumpLog.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
AaruLogging.WriteLine(string.Format(Localization.Core.Trimming_finished_in_0,
_trimStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second)));
}
@@ -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,
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,7 +81,7 @@ partial class Dump
if(decSense.HasValue && decSense?.SenseKey != SenseKeys.NoSense)
{
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
@@ -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,9 +124,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
@@ -152,9 +152,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
@@ -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,9 +178,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
@@ -207,9 +206,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
@@ -227,9 +226,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense?.SenseKey,
decSense?.ASC,
decSense?.ASCQ);
@@ -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,9 +405,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -444,9 +436,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -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,9 +493,10 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -522,9 +511,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -536,9 +525,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -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,9 +561,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -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,9 +799,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -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,9 +989,9 @@ 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,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -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,
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,10 +1074,10 @@ partial class Dump
decSense.Value.SenseKey,
decSense.Value.Description));
_dumpLog.WriteLine(string.Format(Localization.Core.Drive_could_not_read_block_0_Sense_follows,
AaruLogging.WriteLine(string.Format(Localization.Core.Drive_could_not_read_block_0_Sense_follows,
currentBlock));
_dumpLog.WriteLine(Localization.Core.Device_not_ready_Sense,
AaruLogging.WriteLine(Localization.Core.Device_not_ready_Sense,
decSense.Value.SenseKey,
decSense.Value.ASC,
decSense.Value.ASCQ);
@@ -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

@@ -93,7 +93,6 @@ partial class Dump
AaruLogging.Error(Localization.Core
.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;
}

View File

@@ -36,27 +36,21 @@ using System.Reflection;
using System.Runtime.InteropServices;
using Aaru.CommonTypes.Interop;
using Aaru.Devices;
using Aaru.Logging;
using PlatformID = Aaru.CommonTypes.Interop.PlatformID;
using Version = Aaru.CommonTypes.Interop.Version;
namespace Aaru.Core.Logging;
/// <summary>Creates a dump log</summary>
public sealed class DumpLog
public static class DumpLog
{
readonly StreamWriter _logSw;
/// <summary>Initializes the dump log</summary>
/// <param name="outputFile">Output log file</param>
/// <param name="dev">Device</param>
/// <param name="private">Disable saving paths or serial numbers in log</param>
public DumpLog(string outputFile, Device dev, bool @private)
public static void StartLog(Device dev, bool @private)
{
if(string.IsNullOrEmpty(outputFile)) return;
_logSw = new StreamWriter(outputFile, true);
_logSw.WriteLine(Localization.Core.Start_logging_at_0, DateTime.Now);
AaruLogging.Information(Localization.Core.Start_logging_at_0, DateTime.Now);
PlatformID platId = DetectOS.GetRealPlatformID();
string platVer = DetectOS.GetVersion();
@@ -65,37 +59,35 @@ public sealed class DumpLog
Attribute.GetCustomAttribute(typeof(DumpLog).Assembly, typeof(AssemblyInformationalVersionAttribute)) as
AssemblyInformationalVersionAttribute;
_logSw.WriteLine(Localization.Core.System_information);
AaruLogging.Information(Localization.Core.System_information);
_logSw.WriteLine("{0} {1} ({2}-bit)",
AaruLogging.Information("{0} {1} ({2}-bit)",
DetectOS.GetPlatformName(platId, platVer),
platVer,
Environment.Is64BitOperatingSystem ? 64 : 32);
if(DetectOS.IsMono)
_logSw.WriteLine("Mono {0}", Version.GetMonoVersion());
AaruLogging.Information("Mono {0}", Version.GetMonoVersion());
else if(DetectOS.IsNetCore)
_logSw.WriteLine(".NET Core {0}", Version.GetNetCoreVersion());
AaruLogging.Information(".NET Core {0}", Version.GetNetCoreVersion());
else
_logSw.WriteLine(RuntimeInformation.FrameworkDescription);
AaruLogging.Information(RuntimeInformation.FrameworkDescription);
_logSw.WriteLine();
AaruLogging.Information(Localization.Core.Program_information);
AaruLogging.Information("Aaru {0}", assemblyVersion?.InformationalVersion);
AaruLogging.Information(Localization.Core.Running_in_0_bit, Environment.Is64BitProcess ? 64 : 32);
_logSw.WriteLine(Localization.Core.Program_information);
_logSw.WriteLine("Aaru {0}", assemblyVersion?.InformationalVersion);
_logSw.WriteLine(Localization.Core.Running_in_0_bit, Environment.Is64BitProcess ? 64 : 32);
_logSw.WriteLine(DetectOS.IsAdmin
AaruLogging.Information(DetectOS.IsAdmin
? Localization.Core.Running_as_superuser_Yes
: Localization.Core.Running_as_superuser_No);
#if DEBUG
_logSw.WriteLine(Localization.Core.DEBUG_version);
AaruLogging.Information(Localization.Core.DEBUG_version);
#endif
if(@private)
{
string[] args = Environment.GetCommandLineArgs();
for(var i = 0; i < args.Length; i++)
for(int i = 0; i < args.Length; i++)
{
if(args[i].StartsWith("/dev", StringComparison.OrdinalIgnoreCase) ||
args[i].StartsWith("aaru://", StringComparison.OrdinalIgnoreCase))
@@ -111,94 +103,71 @@ public sealed class DumpLog
}
}
_logSw.WriteLine(Localization.Core.Command_line_0, string.Join(" ", args));
AaruLogging.Information(Localization.Core.Command_line_0, string.Join(" ", args));
}
else
_logSw.WriteLine(Localization.Core.Command_line_0, Environment.CommandLine);
AaruLogging.Information(Localization.Core.Command_line_0, Environment.CommandLine);
_logSw.WriteLine();
if(dev is Aaru.Devices.Remote.Device remoteDev)
{
_logSw.WriteLine(Localization.Core.Remote_information);
_logSw.WriteLine(Localization.Core.Server_0, remoteDev.RemoteApplication);
_logSw.WriteLine(Localization.Core.Version_0, remoteDev.RemoteVersion);
AaruLogging.Information(Localization.Core.Remote_information);
AaruLogging.Information(Localization.Core.Server_0, remoteDev.RemoteApplication);
AaruLogging.Information(Localization.Core.Version_0, remoteDev.RemoteVersion);
_logSw.WriteLine(Localization.Core.Operating_system_0_1,
AaruLogging.Information(Localization.Core.Operating_system_0_1,
remoteDev.RemoteOperatingSystem,
remoteDev.RemoteOperatingSystemVersion);
_logSw.WriteLine(Localization.Core.Architecture_0, remoteDev.RemoteArchitecture);
_logSw.WriteLine(Localization.Core.Protocol_version_0, remoteDev.RemoteProtocolVersion);
AaruLogging.Information(Localization.Core.Architecture_0, remoteDev.RemoteArchitecture);
AaruLogging.Information(Localization.Core.Protocol_version_0, remoteDev.RemoteProtocolVersion);
_logSw.WriteLine(DetectOS.IsAdmin
AaruLogging.Information(DetectOS.IsAdmin
? Localization.Core.Running_as_superuser_Yes
: Localization.Core.Running_as_superuser_No);
_logSw.WriteLine(Localization.Core.Log_section_separator);
AaruLogging.Information(Localization.Core.Log_section_separator);
}
_logSw.WriteLine(Localization.Core.Device_information);
_logSw.WriteLine(Localization.Core.Manufacturer_0, dev.Manufacturer);
_logSw.WriteLine(Localization.Core.Model_0, dev.Model);
_logSw.WriteLine(Localization.Core.Firmware_revision_0, dev.FirmwareRevision);
AaruLogging.Information(Localization.Core.Device_information);
AaruLogging.Information(Localization.Core.Manufacturer_0, dev.Manufacturer);
AaruLogging.Information(Localization.Core.Model_0, dev.Model);
AaruLogging.Information(Localization.Core.Firmware_revision_0, dev.FirmwareRevision);
if(!@private) _logSw.WriteLine(Localization.Core.Serial_number_0, dev.Serial);
if(!@private) AaruLogging.Information(Localization.Core.Serial_number_0, dev.Serial);
_logSw.WriteLine(Localization.Core.Removable_device_0, dev.IsRemovable);
_logSw.WriteLine(Localization.Core.Device_type_0, dev.Type);
_logSw.WriteLine(Localization.Core.CompactFlash_device_0, dev.IsCompactFlash);
_logSw.WriteLine(Localization.Core.PCMCIA_device_0, dev.IsPcmcia);
_logSw.WriteLine(Localization.Core.USB_device_0, dev.IsUsb);
AaruLogging.Information(Localization.Core.Removable_device_0, dev.IsRemovable);
AaruLogging.Information(Localization.Core.Device_type_0, dev.Type);
AaruLogging.Information(Localization.Core.CompactFlash_device_0, dev.IsCompactFlash);
AaruLogging.Information(Localization.Core.PCMCIA_device_0, dev.IsPcmcia);
AaruLogging.Information(Localization.Core.USB_device_0, dev.IsUsb);
if(dev.IsUsb)
{
_logSw.WriteLine(Localization.Core.USB_manufacturer_0, dev.UsbManufacturerString);
_logSw.WriteLine(Localization.Core.USB_product_0, dev.UsbProductString);
AaruLogging.Information(Localization.Core.USB_manufacturer_0, dev.UsbManufacturerString);
AaruLogging.Information(Localization.Core.USB_product_0, dev.UsbProductString);
if(!@private) _logSw.WriteLine(Localization.Core.USB_serial_0, dev.UsbSerialString);
if(!@private) AaruLogging.Information(Localization.Core.USB_serial_0, dev.UsbSerialString);
_logSw.WriteLine(Localization.Core.USB_vendor_ID_0, dev.UsbVendorId);
_logSw.WriteLine(Localization.Core.USB_product_ID_0, dev.UsbProductId);
AaruLogging.Information(Localization.Core.USB_vendor_ID_0, dev.UsbVendorId);
AaruLogging.Information(Localization.Core.USB_product_ID_0, dev.UsbProductId);
}
_logSw.WriteLine(Localization.Core.FireWire_device_0, dev.IsFireWire);
AaruLogging.Information(Localization.Core.FireWire_device_0, dev.IsFireWire);
if(dev.IsFireWire)
{
_logSw.WriteLine(Localization.Core.FireWire_vendor_0, dev.FireWireVendorName);
_logSw.WriteLine(Localization.Core.FireWire_model_0, dev.FireWireModelName);
AaruLogging.Information(Localization.Core.FireWire_vendor_0, dev.FireWireVendorName);
AaruLogging.Information(Localization.Core.FireWire_model_0, dev.FireWireModelName);
if(!@private) _logSw.WriteLine(Localization.Core.FireWire_GUID_0, dev.FireWireGuid);
if(!@private) AaruLogging.Information(Localization.Core.FireWire_GUID_0, dev.FireWireGuid);
_logSw.WriteLine(Localization.Core.FireWire_vendor_ID_0, dev.FireWireVendor);
_logSw.WriteLine(Localization.Core.FireWire_product_ID_0, dev.FireWireModel);
AaruLogging.Information(Localization.Core.FireWire_vendor_ID_0, dev.FireWireVendor);
AaruLogging.Information(Localization.Core.FireWire_product_ID_0, dev.FireWireModel);
}
_logSw.WriteLine(Localization.Core.Log_section_separator);
AaruLogging.Information(Localization.Core.Log_section_separator);
_logSw.WriteLine();
_logSw.WriteLine(Localization.Core.Dumping_progress_log);
_logSw.Flush();
}
/// <summary>Adds a new line to the dump log</summary>
/// <param name="format">Format string</param>
/// <param name="args">Arguments</param>
public void WriteLine(string format, params object[] args)
{
if(_logSw == null) return;
var text = string.Format(format, args);
_logSw.WriteLine("{0:s} {1}", DateTime.Now, text);
_logSw.Flush();
}
/// <summary>Finishes and closes the dump log</summary>
public void Close()
{
_logSw?.WriteLine(Localization.Core.Log_section_separator);
_logSw?.WriteLine(Localization.Core.End_logging_on_0, DateTime.Now);
_logSw?.Close();
AaruLogging.Information(Localization.Core.Dumping_progress_log);
}
}

View File

@@ -38,6 +38,7 @@ using Aaru.Core.Logging;
using Aaru.Decoders.CD;
using Aaru.Devices;
using Aaru.Helpers;
using Aaru.Logging;
namespace Aaru.Core.Media;
@@ -60,7 +61,6 @@ public static class CompactDisc
/// <param name="outputPlugin">Output image</param>
/// <param name="fixSubchannel">If we want to fix subchannel contents</param>
/// <param name="fixSubchannelCrc">If we want to fix Q subchannel CRC if the contents look sane</param>
/// <param name="dumpLog">Dumping log</param>
/// <param name="updateStatus">Status update callback</param>
/// <param name="smallestPregapLbaPerTrack">List of smallest known pregap per track</param>
/// <param name="dumping">Set if we are dumping, otherwise converting</param>
@@ -74,7 +74,7 @@ public static class CompactDisc
Dictionary<byte, string> isrcs, byte currentTrack, ref string mcn,
Track[] tracks, HashSet<int> subchannelExtents,
bool fixSubchannelPosition, IWritableOpticalImage outputPlugin,
bool fixSubchannel, bool fixSubchannelCrc, DumpLog dumpLog,
bool fixSubchannel, bool fixSubchannelCrc,
UpdateStatusHandler updateStatus,
Dictionary<byte, int> smallestPregapLbaPerTrack, bool dumping,
out List<ulong> newPregapSectors)
@@ -95,7 +95,6 @@ public static class CompactDisc
currentTrack,
ref mcn,
tracks,
dumpLog,
updateStatus,
smallestPregapLbaPerTrack,
dumping,
@@ -107,15 +106,15 @@ public static class CompactDisc
int prePos = int.MinValue;
// Check subchannel
for(var subPos = 0; subPos < deSub.Length; subPos += 96)
for(int subPos = 0; subPos < deSub.Length; subPos += 96)
{
// Expected LBA
long lba = (long)sectorAddress + subPos / 96;
// We fixed the subchannel
var @fixed = false;
bool @fixed = false;
var q = new byte[12];
byte[] q = new byte[12];
Array.Copy(deSub, subPos + 12, q, 0, 12);
// Check Q CRC
@@ -123,17 +122,18 @@ public static class CompactDisc
bool crcOk = crc[0] == q[10] && crc[1] == q[11];
// Start considering P to be OK
var pOk = true;
var pWeight = 0;
bool pOk = true;
int pWeight = 0;
// Check P and weight
for(int p = subPos; p < subPos + 12; p++)
{
if(deSub[p] != 0 && deSub[p] != 255) pOk = false;
for(var w = 0; w < 8; w++)
if((deSub[p] >> w & 1) > 0)
pWeight++;
for(int w = 0; w < 8; w++)
{
if((deSub[p] >> w & 1) > 0) pWeight++;
}
}
// This seems to be a somewhat common pattern
@@ -156,13 +156,13 @@ public static class CompactDisc
deSub.Skip(subPos + 84).Take(12).All(w => w == 0xFF);
bool rwOk = rOk && sOk && tOk && uOk && vOk && wOk;
var rwPacket = false;
var cdtextPacket = false;
bool rwPacket = false;
bool cdtextPacket = false;
// Check RW contents
if(!rwOk)
{
var sectorSub = new byte[96];
byte[] sectorSub = new byte[96];
Array.Copy(sub, subPos, sectorSub, 0, 96);
DetectRwPackets(sectorSub, out _, out rwPacket, out cdtextPacket);
@@ -177,11 +177,13 @@ public static class CompactDisc
if(!pOk && fixSubchannel)
{
if(pWeight >= 48)
for(int p = subPos; p < subPos + 12; p++)
deSub[p] = 255;
{
for(int p = subPos; p < subPos + 12; p++) deSub[p] = 255;
}
else
for(int p = subPos; p < subPos + 12; p++)
deSub[p] = 0;
{
for(int p = subPos; p < subPos + 12; p++) deSub[p] = 0;
}
pOk = true;
@fixed = true;
@@ -253,20 +255,20 @@ public static class CompactDisc
if(!pOk || !crcOk || !rwOk) continue;
var aframe = (byte)(q[9] / 16 * 10 + (q[9] & 0x0F));
byte aframe = (byte)(q[9] / 16 * 10 + (q[9] & 0x0F));
if((q[0] & 0x3) == 1)
{
var amin = (byte)(q[7] / 16 * 10 + (q[7] & 0x0F));
var asec = (byte)(q[8] / 16 * 10 + (q[8] & 0x0F));
byte amin = (byte)(q[7] / 16 * 10 + (q[7] & 0x0F));
byte asec = (byte)(q[8] / 16 * 10 + (q[8] & 0x0F));
aPos = amin * 60 * 75 + asec * 75 + aframe - 150;
}
else
{
ulong expectedSectorAddress = sectorAddress + (ulong)(subPos / 96) + 150;
var smin = (byte)(expectedSectorAddress / 60 / 75);
byte smin = (byte)(expectedSectorAddress / 60 / 75);
expectedSectorAddress -= (ulong)(smin * 60 * 75);
var ssec = (byte)(expectedSectorAddress / 75);
byte ssec = (byte)(expectedSectorAddress / 75);
aPos = smin * 60 * 75 + ssec * 75 + aframe - 150;
@@ -279,7 +281,7 @@ public static class CompactDisc
prePos = aPos;
var posSub = new byte[96];
byte[] posSub = new byte[96];
Array.Copy(deSub, subPos, posSub, 0, 96);
posSub = Subchannel.Interleave(posSub);
outputPlugin.WriteSectorTag(posSub, (ulong)aPos, SectorTagType.CdSectorSubchannel);
@@ -309,18 +311,17 @@ public static class CompactDisc
/// <param name="sectorAddress">Sector address the subchannel was read from</param>
/// <returns><c>true</c> if indexes have changed, <c>false</c> otherwise</returns>
static bool CheckIndexesFromSubchannel(byte[] deSub, Dictionary<byte, string> isrcs, byte currentTrackNumber,
ref string mcn, Track[] tracks, DumpLog dumpLog,
UpdateStatusHandler updateStatus,
ref string mcn, Track[] tracks, UpdateStatusHandler updateStatus,
Dictionary<byte, int> smallestPregapLbaPerTrack, bool dumping,
out List<ulong> newPregapSectors, ulong sectorAddress)
{
var status = false;
bool status = false;
newPregapSectors = [];
// Check subchannel
for(var subPos = 0; subPos < deSub.Length; subPos += 96)
for(int subPos = 0; subPos < deSub.Length; subPos += 96)
{
var q = new byte[12];
byte[] q = new byte[12];
Array.Copy(deSub, subPos + 12, q, 0, 12);
CRC16CcittContext.Data(q, 10, out byte[] crc);
@@ -339,10 +340,6 @@ public static class CompactDisc
if(!isrcs.ContainsKey(currentTrackNumber))
{
dumpLog?.WriteLine(string.Format(Localization.Core.Found_new_ISRC_0_for_track_1,
isrc,
currentTrackNumber));
updateStatus?.Invoke(string.Format(Localization.Core.Found_new_ISRC_0_for_track_1,
isrc,
currentTrackNumber));
@@ -356,11 +353,6 @@ public static class CompactDisc
if(currentTrack?.Sequence == currentTrackNumber)
{
dumpLog?.WriteLine(string.Format(Localization.Core.ISRC_for_track_0_changed_from_1_to_2,
currentTrackNumber,
isrcs[currentTrackNumber],
isrc));
updateStatus?.Invoke(string.Format(Localization.Core.ISRC_for_track_0_changed_from_1_to_2,
currentTrackNumber,
isrcs[currentTrackNumber],
@@ -383,15 +375,9 @@ public static class CompactDisc
if(!crcOk) continue;
if(mcn is null)
{
dumpLog?.WriteLine(string.Format(Localization.Core.Found_new_MCN_0, newMcn));
updateStatus?.Invoke(string.Format(Localization.Core.Found_new_MCN_0, newMcn));
}
else if(mcn != newMcn)
{
dumpLog?.WriteLine(string.Format(Localization.Core.MCN_changed_from_0_to_1, mcn, newMcn));
updateStatus?.Invoke(string.Format(Localization.Core.MCN_changed_from_0_to_1, mcn, newMcn));
}
mcn = newMcn;
@@ -403,18 +389,18 @@ public static class CompactDisc
continue;
case 1:
{
var trackNo = (byte)(q[1] / 16 * 10 + (q[1] & 0x0F));
byte trackNo = (byte)(q[1] / 16 * 10 + (q[1] & 0x0F));
for(var i = 0; i < tracks.Length; i++)
for(int i = 0; i < tracks.Length; i++)
{
if(tracks[i].Sequence != trackNo) continue;
// Pregap
if(q[2] == 0 && trackNo > 1)
{
var pmin = (byte)(q[3] / 16 * 10 + (q[3] & 0x0F));
var psec = (byte)(q[4] / 16 * 10 + (q[4] & 0x0F));
var pframe = (byte)(q[5] / 16 * 10 + (q[5] & 0x0F));
byte pmin = (byte)(q[3] / 16 * 10 + (q[3] & 0x0F));
byte psec = (byte)(q[4] / 16 * 10 + (q[4] & 0x0F));
byte pframe = (byte)(q[5] / 16 * 10 + (q[5] & 0x0F));
int qPos = pmin * 60 * 75 + psec * 75 + pframe;
// When we are dumping we calculate the pregap in reverse from index 1 back.
@@ -436,16 +422,12 @@ public static class CompactDisc
if(i > 0 && tracks[i - 1].EndSector >= tracks[i].StartSector)
tracks[i - 1].EndSector = tracks[i].StartSector - 1;
dumpLog?.WriteLine(string.Format(Localization.Core.Pregap_for_track_0_set_to_1_sectors,
trackNo,
tracks[i].Pregap));
updateStatus?.Invoke(string.Format(Localization.Core
.Pregap_for_track_0_set_to_1_sectors,
trackNo,
tracks[i].Pregap));
for(var p = 0; p < dif; p++) newPregapSectors.Add(tracks[i].StartSector + (ulong)p);
for(int p = 0; p < dif; p++) newPregapSectors.Add(tracks[i].StartSector + (ulong)p);
status = true;
}
@@ -460,15 +442,11 @@ public static class CompactDisc
if(i > 0 && tracks[i - 1].EndSector >= tracks[i].StartSector)
tracks[i - 1].EndSector = tracks[i].StartSector - 1;
dumpLog?.WriteLine(string.Format(Localization.Core.Pregap_for_track_0_set_to_1_sectors,
trackNo,
tracks[i].Pregap));
updateStatus?.Invoke(string.Format(Localization.Core.Pregap_for_track_0_set_to_1_sectors,
trackNo,
tracks[i].Pregap));
for(var p = 0; p < (int)(tracks[i].Pregap - oldPregap); p++)
for(int p = 0; p < (int)(tracks[i].Pregap - oldPregap); p++)
newPregapSectors.Add(tracks[i].StartSector + (ulong)p);
status = true;
@@ -478,9 +456,9 @@ public static class CompactDisc
if(q[2] == 0) continue;
var amin = (byte)(q[7] / 16 * 10 + (q[7] & 0x0F));
var asec = (byte)(q[8] / 16 * 10 + (q[8] & 0x0F));
var aframe = (byte)(q[9] / 16 * 10 + (q[9] & 0x0F));
byte amin = (byte)(q[7] / 16 * 10 + (q[7] & 0x0F));
byte asec = (byte)(q[8] / 16 * 10 + (q[8] & 0x0F));
byte aframe = (byte)(q[9] / 16 * 10 + (q[9] & 0x0F));
int aPos = amin * 60 * 75 + asec * 75 + aframe - 150;
// Do not set INDEX 1 to a value higher than what the TOC already said.
@@ -488,11 +466,6 @@ public static class CompactDisc
if(tracks[i].Indexes.ContainsKey(q[2]) && aPos >= tracks[i].Indexes[q[2]]) continue;
dumpLog?.WriteLine(string.Format(Localization.Core.Setting_index_0_for_track_1_to_LBA_2,
q[2],
trackNo,
aPos));
updateStatus?.Invoke(string.Format(Localization.Core.Setting_index_0_for_track_1_to_LBA_2,
q[2],
trackNo,
@@ -522,18 +495,18 @@ public static class CompactDisc
rwPacket = false;
cdtextPacket = false;
var cdTextPack1 = new byte[18];
var cdTextPack2 = new byte[18];
var cdTextPack3 = new byte[18];
var cdTextPack4 = new byte[18];
var cdSubRwPack1 = new byte[24];
var cdSubRwPack2 = new byte[24];
var cdSubRwPack3 = new byte[24];
var cdSubRwPack4 = new byte[24];
byte[] cdTextPack1 = new byte[18];
byte[] cdTextPack2 = new byte[18];
byte[] cdTextPack3 = new byte[18];
byte[] cdTextPack4 = new byte[18];
byte[] cdSubRwPack1 = new byte[24];
byte[] cdSubRwPack2 = new byte[24];
byte[] cdSubRwPack3 = new byte[24];
byte[] cdSubRwPack4 = new byte[24];
var i = 0;
int i = 0;
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack1[j] = (byte)(cdTextPack1[j] | (subchannel[i++] & 0x3F) << 2);
@@ -548,7 +521,7 @@ public static class CompactDisc
if(j < 18) cdTextPack1[j] = (byte)(cdTextPack1[j] | subchannel[i++] & 0x3F);
}
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack2[j] = (byte)(cdTextPack2[j] | (subchannel[i++] & 0x3F) << 2);
@@ -563,7 +536,7 @@ public static class CompactDisc
if(j < 18) cdTextPack2[j] = (byte)(cdTextPack2[j] | subchannel[i++] & 0x3F);
}
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack3[j] = (byte)(cdTextPack3[j] | (subchannel[i++] & 0x3F) << 2);
@@ -578,7 +551,7 @@ public static class CompactDisc
if(j < 18) cdTextPack3[j] = (byte)(cdTextPack3[j] | subchannel[i++] & 0x3F);
}
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack4[j] = (byte)(cdTextPack4[j] | (subchannel[i++] & 0x3F) << 2);
@@ -595,13 +568,13 @@ public static class CompactDisc
i = 0;
for(var j = 0; j < 24; j++) cdSubRwPack1[j] = (byte)(subchannel[i++] & 0x3F);
for(int j = 0; j < 24; j++) cdSubRwPack1[j] = (byte)(subchannel[i++] & 0x3F);
for(var j = 0; j < 24; j++) cdSubRwPack2[j] = (byte)(subchannel[i++] & 0x3F);
for(int j = 0; j < 24; j++) cdSubRwPack2[j] = (byte)(subchannel[i++] & 0x3F);
for(var j = 0; j < 24; j++) cdSubRwPack3[j] = (byte)(subchannel[i++] & 0x3F);
for(int j = 0; j < 24; j++) cdSubRwPack3[j] = (byte)(subchannel[i++] & 0x3F);
for(var j = 0; j < 24; j++) cdSubRwPack4[j] = (byte)(subchannel[i++] & 0x3F);
for(int j = 0; j < 24; j++) cdSubRwPack4[j] = (byte)(subchannel[i++] & 0x3F);
switch(cdSubRwPack1[0])
{
@@ -697,14 +670,14 @@ public static class CompactDisc
/// <returns><c>true</c> if subchannel contains a TEXT packet, <c>false</c> otherwise</returns>
static bool CheckCdTextPackets(byte[] subchannel)
{
var cdTextPack1 = new byte[18];
var cdTextPack2 = new byte[18];
var cdTextPack3 = new byte[18];
var cdTextPack4 = new byte[18];
byte[] cdTextPack1 = new byte[18];
byte[] cdTextPack2 = new byte[18];
byte[] cdTextPack3 = new byte[18];
byte[] cdTextPack4 = new byte[18];
var i = 0;
int i = 0;
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack1[j] = (byte)(cdTextPack1[j] | (subchannel[i++] & 0x3F) << 2);
@@ -719,7 +692,7 @@ public static class CompactDisc
if(j < 18) cdTextPack1[j] = (byte)(cdTextPack1[j] | subchannel[i++] & 0x3F);
}
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack2[j] = (byte)(cdTextPack2[j] | (subchannel[i++] & 0x3F) << 2);
@@ -734,7 +707,7 @@ public static class CompactDisc
if(j < 18) cdTextPack2[j] = (byte)(cdTextPack2[j] | subchannel[i++] & 0x3F);
}
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack3[j] = (byte)(cdTextPack3[j] | (subchannel[i++] & 0x3F) << 2);
@@ -749,7 +722,7 @@ public static class CompactDisc
if(j < 18) cdTextPack3[j] = (byte)(cdTextPack3[j] | subchannel[i++] & 0x3F);
}
for(var j = 0; j < 18; j++)
for(int j = 0; j < 18; j++)
{
cdTextPack4[j] = (byte)(cdTextPack4[j] | (subchannel[i++] & 0x3F) << 2);
@@ -764,12 +737,12 @@ public static class CompactDisc
if(j < 18) cdTextPack4[j] = (byte)(cdTextPack4[j] | subchannel[i++] & 0x3F);
}
var status = true;
bool status = true;
if((cdTextPack1[0] & 0x80) == 0x80)
{
var cdTextPack1Crc = BigEndianBitConverter.ToUInt16(cdTextPack1, 16);
var cdTextPack1ForCrc = new byte[16];
ushort cdTextPack1Crc = BigEndianBitConverter.ToUInt16(cdTextPack1, 16);
byte[] cdTextPack1ForCrc = new byte[16];
Array.Copy(cdTextPack1, 0, cdTextPack1ForCrc, 0, 16);
ushort calculatedCdtp1Crc = CRC16CcittContext.Calculate(cdTextPack1ForCrc);
@@ -778,8 +751,8 @@ public static class CompactDisc
if((cdTextPack2[0] & 0x80) == 0x80)
{
var cdTextPack2Crc = BigEndianBitConverter.ToUInt16(cdTextPack2, 16);
var cdTextPack2ForCrc = new byte[16];
ushort cdTextPack2Crc = BigEndianBitConverter.ToUInt16(cdTextPack2, 16);
byte[] cdTextPack2ForCrc = new byte[16];
Array.Copy(cdTextPack2, 0, cdTextPack2ForCrc, 0, 16);
ushort calculatedCdtp2Crc = CRC16CcittContext.Calculate(cdTextPack2ForCrc);
@@ -788,8 +761,8 @@ public static class CompactDisc
if((cdTextPack3[0] & 0x80) == 0x80)
{
var cdTextPack3Crc = BigEndianBitConverter.ToUInt16(cdTextPack3, 16);
var cdTextPack3ForCrc = new byte[16];
ushort cdTextPack3Crc = BigEndianBitConverter.ToUInt16(cdTextPack3, 16);
byte[] cdTextPack3ForCrc = new byte[16];
Array.Copy(cdTextPack3, 0, cdTextPack3ForCrc, 0, 16);
ushort calculatedCdtp3Crc = CRC16CcittContext.Calculate(cdTextPack3ForCrc);
@@ -798,8 +771,8 @@ public static class CompactDisc
if((cdTextPack4[0] & 0x80) != 0x80) return status;
var cdTextPack4Crc = BigEndianBitConverter.ToUInt16(cdTextPack4, 16);
var cdTextPack4ForCrc = new byte[16];
ushort cdTextPack4Crc = BigEndianBitConverter.ToUInt16(cdTextPack4, 16);
byte[] cdTextPack4ForCrc = new byte[16];
Array.Copy(cdTextPack4, 0, cdTextPack4ForCrc, 0, 16);
ushort calculatedCdtp4Crc = CRC16CcittContext.Calculate(cdTextPack4ForCrc);
@@ -843,8 +816,8 @@ public static class CompactDisc
fixedMcn = false;
fixedIsrc = false;
var preQ = new byte[12];
var nextQ = new byte[12];
byte[] preQ = new byte[12];
byte[] nextQ = new byte[12];
Array.Copy(deSub, subPos + 12 - 96, preQ, 0, 12);
Array.Copy(deSub, subPos + 12 + 96, nextQ, 0, 12);
@@ -998,14 +971,14 @@ public static class CompactDisc
}
}
var amin = (byte)(q[7] / 16 * 10 + (q[7] & 0x0F));
var asec = (byte)(q[8] / 16 * 10 + (q[8] & 0x0F));
byte amin = (byte)(q[7] / 16 * 10 + (q[7] & 0x0F));
byte asec = (byte)(q[8] / 16 * 10 + (q[8] & 0x0F));
aframe = (byte)(q[9] / 16 * 10 + (q[9] & 0x0F));
int aPos = amin * 60 * 75 + asec * 75 + aframe - 150;
var pmin = (byte)(q[3] / 16 * 10 + (q[3] & 0x0F));
var psec = (byte)(q[4] / 16 * 10 + (q[4] & 0x0F));
var pframe = (byte)(q[5] / 16 * 10 + (q[5] & 0x0F));
byte pmin = (byte)(q[3] / 16 * 10 + (q[3] & 0x0F));
byte psec = (byte)(q[4] / 16 * 10 + (q[4] & 0x0F));
byte pframe = (byte)(q[5] / 16 * 10 + (q[5] & 0x0F));
int pPos = pmin * 60 * 75 + psec * 75 + pframe;
// TODO: pregap
@@ -1509,16 +1482,14 @@ public static class CompactDisc
/// <param name="trackFlags">Flags of tracks</param>
/// <param name="blocks">Disc size</param>
/// <param name="subLog">Subchannel log</param>
/// <param name="dumpLog">Dump log</param>
/// <param name="initProgress">Progress initialization callback</param>
/// <param name="updateProgress">Progress update callback</param>
/// <param name="endProgress">Progress finalization callback</param>
/// <param name="outputPlugin">Output image</param>
public static void GenerateSubchannels(HashSet<int> subchannelExtents, Track[] tracks,
Dictionary<byte, byte> trackFlags, ulong blocks, SubchannelLog subLog,
DumpLog dumpLog, InitProgressHandler initProgress,
UpdateProgressHandler updateProgress, EndProgressHandler endProgress,
IWritableImage outputPlugin)
InitProgressHandler initProgress, UpdateProgressHandler updateProgress,
EndProgressHandler endProgress, IWritableImage outputPlugin)
{
initProgress?.Invoke();
@@ -1561,7 +1532,7 @@ public static class CompactDisc
sector,
(long)blocks);
dumpLog?.WriteLine($"Generating subchannel for sector {sector}.");
AaruLogging.WriteLine($"Generating subchannel for sector {sector}.");
byte[] sub = Subchannel.Generate(sector, track?.Sequence ?? 0, (int)pregap, (int)trackStart, flags, index);

View File

@@ -36,7 +36,6 @@ using System.Linq;
using Aaru.CommonTypes;
using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Structs;
using Aaru.Core.Logging;
using Aaru.Core.Media.Detection;
using Aaru.Database.Models;
using Aaru.Decoders.CD;
@@ -63,7 +62,7 @@ public static class CompactDisc
/// <returns><c>true</c> if offset could be found, <c>false</c> otherwise</returns>
[SuppressMessage("ReSharper", "TooWideLocalVariableScope")]
public static void GetOffset(CdOffset cdOffset, Device dbDev, bool debug, Aaru.Devices.Device dev,
MediaType dskType, DumpLog dumpLog, Track[] tracks, UpdateStatusHandler updateStatus,
MediaType dskType, Track[] tracks, UpdateStatusHandler updateStatus,
out int? driveOffset, out int? combinedOffset, out bool supportsPlextorReadCdDa)
{
byte[] cmdBuf;
@@ -77,7 +76,7 @@ public static class CompactDisc
int diff;
Track dataTrack = default;
Track audioTrack = default;
var offsetFound = false;
bool offsetFound = false;
const uint sectorSize = 2352;
driveOffset = cdOffset?.Offset * 4;
combinedOffset = null;
@@ -97,7 +96,7 @@ public static class CompactDisc
tmpBuf = new byte[sectorSync.Length];
// Ensure to be out of the pregap, or multi-session discs give funny values
var wantedLba = (uint)(dataTrack.StartSector + 151);
uint wantedLba = (uint)(dataTrack.StartSector + 151);
// Plextor READ CDDA
if(dbDev?.ATAPI?.RemovableMedias?.Any(d => d.SupportsPlextorReadCDDA == true) == true ||
@@ -117,7 +116,7 @@ public static class CompactDisc
{
supportsPlextorReadCdDa = true;
for(var i = 0; i < cmdBuf.Length - sectorSync.Length; i++)
for(int i = 0; i < cmdBuf.Length - sectorSync.Length; i++)
{
Array.Copy(cmdBuf, i, tmpBuf, 0, sectorSync.Length);
@@ -174,7 +173,7 @@ public static class CompactDisc
if(!sense && !dev.Error)
{
// Clear cache
for(var i = 0; i < 63; i++)
for(int i = 0; i < 63; i++)
{
sense = dev.ReadCd(out _,
out _,
@@ -213,7 +212,7 @@ public static class CompactDisc
dev.Timeout,
out _);
for(var i = 0; i < cmdBuf.Length - sectorSync.Length; i++)
for(int i = 0; i < cmdBuf.Length - sectorSync.Length; i++)
{
Array.Copy(cmdBuf, i, tmpBuf, 0, sectorSync.Length);
@@ -249,7 +248,7 @@ public static class CompactDisc
// Try to get another the offset some other way, we need an audio track just after a data track, same session
for(var i = 1; i < tracks.Length; i++)
for(int i = 1; i < tracks.Length; i++)
{
if(tracks[i - 1].Type == TrackType.Audio || tracks[i].Type != TrackType.Audio) continue;
@@ -308,7 +307,7 @@ public static class CompactDisc
tmpBuf = new byte[sectorSync.Length];
for(var i = 0; i < cmdBuf.Length - sectorSync.Length; i++)
for(int i = 0; i < cmdBuf.Length - sectorSync.Length; i++)
{
Array.Copy(cmdBuf, i, tmpBuf, 0, sectorSync.Length);
@@ -341,12 +340,12 @@ public static class CompactDisc
if(sense || dev.Error) return;
for(var i = 0; i < dataBuf.Length; i++) dataBuf[i] ^= Sector.ScrambleTable[i];
for(int i = 0; i < dataBuf.Length; i++) dataBuf[i] ^= Sector.ScrambleTable[i];
for(var i = 0; i < 2352; i++)
for(int i = 0; i < 2352; i++)
{
var dataSide = new byte[2352 - i];
var audioSide = new byte[2352 - i];
byte[] dataSide = new byte[2352 - i];
byte[] audioSide = new byte[2352 - i];
Array.Copy(dataBuf, i, dataSide, 0, dataSide.Length);
Array.Copy(cmdBuf, 0, audioSide, 0, audioSide.Length);
@@ -360,7 +359,7 @@ public static class CompactDisc
}
else
{
var videoNowColorFrame = new byte[9 * sectorSize];
byte[] videoNowColorFrame = new byte[9 * sectorSize];
sense = dev.ReadCd(out cmdBuf,
out _,
@@ -402,18 +401,13 @@ public static class CompactDisc
}
if(videoNowColorFrame is null)
{
dumpLog?.WriteLine(Localization.Core.Could_not_find_VideoNow_Color_frame_offset);
updateStatus?.Invoke("Could not find VideoNow Color frame offset, dump may not be correct.");
}
updateStatus?.Invoke(Localization.Core.Could_not_find_VideoNow_Color_frame_offset);
else
{
combinedOffset = MMC.GetVideoNowColorOffset(videoNowColorFrame);
dumpLog?.WriteLine(string.Format(Localization.Core.VideoNow_Color_frame_is_offset_0_bytes,
updateStatus?.Invoke(string.Format(Localization.Core.VideoNow_Color_frame_is_offset_0_bytes,
combinedOffset));
updateStatus?.Invoke($"VideoNow Color frame is offset {combinedOffset} bytes.");
}
}
}

View File

@@ -1266,7 +1266,6 @@ public sealed class ImageConvertViewModel : ViewModelBase
false,
false,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);
@@ -1300,9 +1299,7 @@ public sealed class ImageConvertViewModel : ViewModelBase
icon: Icon.Error)
.ShowWindowDialogAsync(_view));
AaruLogging.Error(UI.Error_0_reading_sector_1_not_continuing,
errno,
doneSectors);
AaruLogging.Error(UI.Error_0_reading_sector_1_not_continuing, errno, doneSectors);
return;
}
@@ -1335,7 +1332,6 @@ public sealed class ImageConvertViewModel : ViewModelBase
false,
false,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);
@@ -1369,9 +1365,7 @@ public sealed class ImageConvertViewModel : ViewModelBase
icon: Icon.Error)
.ShowWindowDialogAsync(_view));
AaruLogging.Error(UI.Error_0_reading_sector_1_not_continuing,
errno,
doneSectors);
AaruLogging.Error(UI.Error_0_reading_sector_1_not_continuing, errno, doneSectors);
return;
}
@@ -1683,8 +1677,7 @@ public sealed class ImageConvertViewModel : ViewModelBase
{
warning = true;
AaruLogging.Error(UI.Error_0_writing_tag_continuing,
outputFormat.ErrorMessage);
AaruLogging.Error(UI.Error_0_writing_tag_continuing, outputFormat.ErrorMessage);
}
else
{
@@ -1755,9 +1748,7 @@ public sealed class ImageConvertViewModel : ViewModelBase
{
warning = true;
AaruLogging.Error(UI.Error_0_reading_tag_for_sector_1_continuing,
errno,
doneSectors);
AaruLogging.Error(UI.Error_0_reading_tag_for_sector_1_continuing, errno, doneSectors);
}
else
{

View File

@@ -54,6 +54,7 @@ using Aaru.Core.Media.Info;
using Aaru.Devices;
using Aaru.Gui.Models;
using Aaru.Localization;
using Aaru.Logging;
using Avalonia.Controls;
using Avalonia.Platform.Storage;
using Avalonia.Threading;
@@ -499,7 +500,7 @@ public sealed class MediaDumpViewModel : ViewModelBase
{
this.RaiseAndSetIfChanged(ref _existingMetadata, value);
if(value == false)
if(!value)
{
_sidecar = null;
@@ -857,9 +858,9 @@ public sealed class MediaDumpViewModel : ViewModelBase
}
*/
var dumpLog = new DumpLog(_outputPrefix + ".log", _dev, false);
DumpLog.StartLog(_dev, false);
dumpLog.WriteLine(UI.Output_image_format_0, SelectedPlugin.Name);
AaruLogging.WriteLine(UI.Output_image_format_0, SelectedPlugin.Name);
var errorLog = new ErrorLog(_outputPrefix + ".error.log");
@@ -873,15 +874,14 @@ public sealed class MediaDumpViewModel : ViewModelBase
Persistent,
StopOnError,
_resume,
dumpLog,
encoding,
_outputPrefix,
Destination,
parsedOptions,
_sidecar,
(uint)Skipped,
ExistingMetadata == false,
Trim == false,
!ExistingMetadata,
!Trim,
Track1Pregap,
true,
false,

View File

@@ -335,7 +335,6 @@ public abstract class OpticalImageConvertIssueTest
true,
true,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);
@@ -376,7 +375,6 @@ public abstract class OpticalImageConvertIssueTest
true,
true,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);

View File

@@ -434,7 +434,6 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
true,
true,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);
@@ -475,7 +474,6 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
true,
true,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);
@@ -568,7 +566,6 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
null,
null,
null,
null,
outputFormat);
}

View File

@@ -87,15 +87,11 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
AaruLogging.Debug(MODULE_NAME, "--creator={0}", Markup.Escape(settings.Creator ?? ""));
AaruLogging.Debug(MODULE_NAME, "--debug={0}", settings.Debug);
AaruLogging.Debug(MODULE_NAME,
"--drive-manufacturer={0}",
Markup.Escape(settings.DriveManufacturer ?? ""));
AaruLogging.Debug(MODULE_NAME, "--drive-manufacturer={0}", Markup.Escape(settings.DriveManufacturer ?? ""));
AaruLogging.Debug(MODULE_NAME, "--drive-model={0}", Markup.Escape(settings.DriveModel ?? ""));
AaruLogging.Debug(MODULE_NAME,
"--drive-revision={0}",
Markup.Escape(settings.DriveFirmwareRevision ?? ""));
AaruLogging.Debug(MODULE_NAME, "--drive-revision={0}", Markup.Escape(settings.DriveFirmwareRevision ?? ""));
AaruLogging.Debug(MODULE_NAME, "--drive-serial={0}", Markup.Escape(settings.DriveSerialNumber ?? ""));
AaruLogging.Debug(MODULE_NAME, "--force={0}", settings.Force);
@@ -105,15 +101,11 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
AaruLogging.Debug(MODULE_NAME, "--media-barcode={0}", Markup.Escape(settings.MediaBarcode ?? ""));
AaruLogging.Debug(MODULE_NAME, "--media-lastsequence={0}", settings.LastMediaSequence);
AaruLogging.Debug(MODULE_NAME,
"--media-manufacturer={0}",
Markup.Escape(settings.MediaManufacturer ?? ""));
AaruLogging.Debug(MODULE_NAME, "--media-manufacturer={0}", Markup.Escape(settings.MediaManufacturer ?? ""));
AaruLogging.Debug(MODULE_NAME, "--media-model={0}", Markup.Escape(settings.MediaModel ?? ""));
AaruLogging.Debug(MODULE_NAME,
"--media-partnumber={0}",
Markup.Escape(settings.MediaPartNumber ?? ""));
AaruLogging.Debug(MODULE_NAME, "--media-partnumber={0}", Markup.Escape(settings.MediaPartNumber ?? ""));
AaruLogging.Debug(MODULE_NAME, "--media-sequence={0}", settings.MediaSequence);
AaruLogging.Debug(MODULE_NAME, "--media-serial={0}", Markup.Escape(settings.MediaSerialNumber ?? ""));
@@ -755,8 +747,7 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
{
if(!settings.Force)
{
AaruLogging
.Error(UI
AaruLogging.Error(UI
.Input_image_is_not_returning_raw_sectors_use_force_if_you_want_to_continue);
errno = ErrorNumber.InOutError;
@@ -1182,7 +1173,6 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
fixSubchannel,
fixSubchannelCrc,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);
@@ -1204,16 +1194,14 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
if(settings.Force)
{
AaruLogging
.Error(UI.Error_0_reading_tag_for_sector_1_continuing,
AaruLogging.Error(UI.Error_0_reading_tag_for_sector_1_continuing,
errno,
doneSectors + track.StartSector);
}
else
{
AaruLogging
.Error(UI
.Error_0_reading_tag_for_sector_1_not_continuing,
.Error(UI.Error_0_reading_tag_for_sector_1_not_continuing,
errno,
doneSectors + track.StartSector);
@@ -1249,7 +1237,6 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
fixSubchannel,
fixSubchannelCrc,
null,
null,
smallestPregapLbaPerTrack,
false,
out _);
@@ -1272,16 +1259,14 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
if(settings.Force)
{
AaruLogging
.Error(UI.Error_0_reading_tag_for_sector_1_continuing,
AaruLogging.Error(UI.Error_0_reading_tag_for_sector_1_continuing,
errno,
doneSectors + track.StartSector);
}
else
{
AaruLogging
.Error(UI
.Error_0_reading_tag_for_sector_1_not_continuing,
.Error(UI.Error_0_reading_tag_for_sector_1_not_continuing,
errno,
doneSectors + track.StartSector);
@@ -1294,15 +1279,13 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
{
if(settings.Force)
{
AaruLogging
.Error(UI.Error_0_writing_tag_for_sector_1_continuing,
AaruLogging.Error(UI.Error_0_writing_tag_for_sector_1_continuing,
outputOptical.ErrorMessage,
doneSectors + track.StartSector);
}
else
{
AaruLogging
.Error(UI.Error_0_writing_tag_for_sector_1_not_continuing,
AaruLogging.Error(UI.Error_0_writing_tag_for_sector_1_not_continuing,
outputOptical.ErrorMessage,
doneSectors + track.StartSector);
@@ -1390,7 +1373,6 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
null,
null,
null,
null,
outputOptical);
});
}
@@ -1756,8 +1738,7 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
if(!closed)
{
AaruLogging.Error(UI.Error_0_closing_output_image_Contents_are_not_correct,
outputFormat.ErrorMessage);
AaruLogging.Error(UI.Error_0_closing_output_image_Contents_are_not_correct, outputFormat.ErrorMessage);
return (int)ErrorNumber.WriteError;
}

View File

@@ -474,18 +474,12 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
IBaseWritableImage outputFormat = candidates[0];
var dumpLog = new DumpLog(outputPrefix + ".log", dev, settings.Private);
DumpLog.StartLog(dev, settings.Private);
if(settings.Verbose)
{
dumpLog.WriteLine(UI.Output_image_format_0_1, outputFormat.Name, outputFormat.Id);
AaruLogging.Verbose(UI.Output_image_format_0_1, outputFormat.Name, outputFormat.Id);
}
else
{
dumpLog.WriteLine(UI.Output_image_format_0, outputFormat.Name);
AaruLogging.WriteLine(UI.Output_image_format_0, outputFormat.Name);
}
var errorLog = new ErrorLog(outputPrefix + ".error.log");
@@ -499,7 +493,6 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
settings.Persistent,
settings.StopOnError,
resumeClass,
dumpLog,
encodingClass,
outputPrefix,
outputPrefix + extension,
@@ -535,19 +528,16 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
.Columns(new TaskDescriptionColumn(), new ProgressBarColumn(), new PercentageColumn())
.Start(ctx =>
{
dumper.UpdateStatus += text => { AaruLogging.WriteLine(Markup.Escape(text)); };
dumper.UpdateStatus += text => { AaruLogging.WriteLine(text); };
dumper.ErrorMessage += text => { AaruLogging.Error($"[red]{Markup.Escape(text)}[/]"); };
dumper.ErrorMessage += text => { AaruLogging.Error(text); };
dumper.StoppingErrorMessage += text =>
{
AaruLogging.Error($"[red]{Markup.Escape(text)}[/]");
};
dumper.StoppingErrorMessage += text => { AaruLogging.Error(text); };
dumper.UpdateProgress += (text, current, maximum) =>
{
_progressTask1 ??= ctx.AddTask("Progress");
_progressTask1.Description = Markup.Escape(text);
_progressTask1.Description = text;
_progressTask1.Value = current;
_progressTask1.MaxValue = maximum;
};
@@ -555,10 +545,10 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
dumper.PulseProgress += text =>
{
if(_progressTask1 is null)
ctx.AddTask(Markup.Escape(text)).IsIndeterminate();
ctx.AddTask(text).IsIndeterminate();
else
{
_progressTask1.Description = Markup.Escape(text);
_progressTask1.Description = text;
_progressTask1.IsIndeterminate = true;
}
};
@@ -582,7 +572,7 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
dumper.UpdateProgress2 += (text, current, maximum) =>
{
_progressTask2 ??= ctx.AddTask("Progress");
_progressTask2.Description = Markup.Escape(text);
_progressTask2.Description = text;
_progressTask2.Value = current;
_progressTask2.MaxValue = maximum;
};

View File

@@ -798,15 +798,14 @@ sealed class MediaInfoCommand : Command<MediaInfoCommand.Settings>
if(scsiInfo.Toc != null || scsiInfo.RawToc != null)
{
Track[] tracks =
Dump.GetCdTracks(dev, null, false, out long lastSector, null, null, null, out _, null, null);
Track[] tracks = Dump.GetCdTracks(dev, false, out long lastSector, null, null, null, out _, null, null);
if(tracks != null)
{
uint firstLba = (uint)tracks.Min(t => t.StartSector);
bool supportsPqSubchannel = Dump.SupportsPqSubchannel(dev, null, null, firstLba);
bool supportsRwSubchannel = Dump.SupportsRwSubchannel(dev, null, null, firstLba);
bool supportsPqSubchannel = Dump.SupportsPqSubchannel(dev, null, firstLba);
bool supportsRwSubchannel = Dump.SupportsRwSubchannel(dev, null, firstLba);
// Open main database
var ctx = AaruContext.Create(Aaru.Settings.Settings.MainDbPath);
@@ -818,7 +817,6 @@ sealed class MediaInfoCommand : Command<MediaInfoCommand.Settings>
d.Revision == dev.FirmwareRevision);
Dump.SolveTrackPregaps(dev,
null,
null,
tracks,
supportsPqSubchannel,
@@ -867,7 +865,6 @@ sealed class MediaInfoCommand : Command<MediaInfoCommand.Settings>
debug,
dev,
scsiInfo.MediaType,
null,
tracks,
null,
out int? driveOffset,