From 0bec3941666bb8a07b7e4e56b504ec6b61757eae Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 13 Jan 2026 12:54:22 +0000 Subject: [PATCH] Only re-read pregap sectors that belong to track type changes. --- Aaru.Core/Devices/Dumping/CompactDisc/Data.cs | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs index 133b730d7..5a0baa058 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs @@ -49,7 +49,6 @@ using Aaru.Decoders.SCSI; using Aaru.Devices; using Aaru.Localization; using Aaru.Logging; -using Humanizer; using Track = Aaru.CommonTypes.Structs.Track; using TrackType = Aaru.CommonTypes.Enums.TrackType; @@ -844,7 +843,23 @@ partial class Dump { (outputFormat as IWritableOpticalImage).SetTracks(tracks.ToList()); - _resume.BadBlocks.AddRange(newPregapSectors); + foreach(ulong newPregapSector in newPregapSectors) + { + if(newPregapSector == 0) continue; + + Track sectorTrack = + tracks.FirstOrDefault(t => t.StartSector <= newPregapSector && + t.EndSector >= newPregapSector); + + if(sectorTrack.Sequence == 1) continue; + + Track prevTrack = + tracks.FirstOrDefault(t => t.Sequence == sectorTrack.Sequence - 1); + + if(sectorTrack.Session != prevTrack.Session) continue; + + if(sectorTrack.Type != prevTrack.Type) _resume.BadBlocks.Add(newPregapSector); + } if(i >= blocksToRead) i -= blocksToRead; @@ -1106,7 +1121,22 @@ partial class Dump { (outputFormat as IWritableOpticalImage).SetTracks(tracks.ToList()); - _resume.BadBlocks.AddRange(newPregapSectors); + foreach(ulong newPregapSector in newPregapSectors) + { + if(newPregapSector == 0) continue; + + Track sectorTrack = + tracks.FirstOrDefault(t => t.StartSector <= newPregapSector && + t.EndSector >= newPregapSector); + + if(sectorTrack.Sequence == 1) continue; + + Track prevTrack = tracks.FirstOrDefault(t => t.Sequence == sectorTrack.Sequence - 1); + + if(sectorTrack.Session != prevTrack.Session) continue; + + if(sectorTrack.Type != prevTrack.Type) _resume.BadBlocks.Add(newPregapSector); + } if(i >= blocksToRead) i -= blocksToRead;