Refactor sector writing methods to include SectorStatus parameter and update related logic

This commit is contained in:
2025-10-22 20:25:23 +01:00
parent 0ac2a48fb6
commit ce0e0dff22
55 changed files with 927 additions and 676 deletions

View File

@@ -285,9 +285,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 +314,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)
@@ -361,12 +359,12 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Media_identified_as_0, dskType.Humanize()));
bool endOfMedia = false;
var endOfMedia = false;
ulong currentBlock = 0;
uint currentFile = 0;
byte currentPartition = 0;
byte totalPartitions = 1; // TODO: Handle partitions.
bool fixedLen = false;
var fixedLen = false;
uint transferLen = blockSize;
firstRead:
@@ -601,8 +599,8 @@ partial class Dump
return;
}
bool canLocateLong = false;
bool canLocate = false;
var canLocateLong = false;
var canLocate = false;
UpdateStatus?.Invoke(Localization.Core.Positioning_tape_to_block_1);
@@ -1092,7 +1090,7 @@ partial class Dump
// Write empty data
_writeStopwatch.Restart();
outputTape.WriteSector(new byte[blockSize], currentBlock);
outputTape.WriteSector(new byte[blockSize], currentBlock, SectorStatus.NotDumped);
imageWriteDuration += _writeStopwatch.Elapsed.TotalSeconds;
mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration);
@@ -1104,7 +1102,7 @@ partial class Dump
mhddLog.Write(currentBlock, duration);
ibgLog.Write(currentBlock, currentSpeed * 1024);
_writeStopwatch.Restart();
outputTape.WriteSector(cmdBuf, currentBlock);
outputTape.WriteSector(cmdBuf, currentBlock, SectorStatus.Dumped);
imageWriteDuration += _writeStopwatch.Elapsed.TotalSeconds;
extents.Add(currentBlock, 1, true);
}
@@ -1167,8 +1165,8 @@ partial class Dump
if(_resume.BadBlocks.Count > 0 && !_aborted && _retryPasses > 0 && (canLocate || canLocateLong))
{
int pass = 1;
bool forward = false;
var pass = 1;
var forward = false;
const bool runningPersistent = false;
Modes.ModePage? currentModePage;
@@ -1299,13 +1297,13 @@ partial class Dump
{
_resume.BadBlocks.Remove(badBlock);
extents.Add(badBlock);
outputTape.WriteSector(cmdBuf, badBlock);
outputTape.WriteSector(cmdBuf, badBlock, SectorStatus.Dumped);
UpdateStatus?.Invoke(string.Format(Localization.Core.Correctly_retried_block_0_in_pass_1,
badBlock,
pass));
}
else if(runningPersistent) outputTape.WriteSector(cmdBuf, badBlock);
else if(runningPersistent) outputTape.WriteSector(cmdBuf, badBlock, SectorStatus.Errored);
}
if(pass < _retryPasses && !_aborted && _resume.BadBlocks.Count > 0)