From b42963e3986e9df371a04391562fbb676f1f9e1b Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 19 Jul 2020 14:50:28 +0100 Subject: [PATCH] Fix pregap calculation in track mode changes when pregap ends in 0. --- .idea/.idea.Aaru/.idea/contentModel.xml | 10 -------- Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs | 2 +- .../Devices/Dumping/CompactDisc/Pregap.cs | 25 +++++++++++++++---- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/.idea/.idea.Aaru/.idea/contentModel.xml b/.idea/.idea.Aaru/.idea/contentModel.xml index 8c21e9087..ac6b5938c 100644 --- a/.idea/.idea.Aaru/.idea/contentModel.xml +++ b/.idea/.idea.Aaru/.idea/contentModel.xml @@ -16,16 +16,6 @@ - - - - - - - - - - diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs index edfc5412d..a6dc08dab 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -396,7 +396,7 @@ namespace Aaru.Core.Devices.Dumping UpdateStatus?.Invoke("Calculating pregaps, can take some time..."); SolveTrackPregaps(_dev, _dumpLog, UpdateStatus, tracks, supportsPqSubchannel, supportsRwSubchannel, _dbDev, - out bool inexactPositioning); + out bool inexactPositioning, true); if(inexactPositioning) { diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs index f85b320d4..9f453cef2 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs @@ -124,7 +124,7 @@ namespace Aaru.Core.Devices.Dumping public static void SolveTrackPregaps(Device dev, DumpLog dumpLog, UpdateStatusHandler updateStatus, Track[] tracks, bool supportsPqSubchannel, bool supportsRwSubchannel, - Database.Models.Device dbDev, out bool inexactPositioning) + Database.Models.Device dbDev, out bool inexactPositioning, bool dumping) { bool sense = true; // Sense indicator byte[] subBuf = null; @@ -178,7 +178,7 @@ namespace Aaru.Core.Devices.Dumping Track track = tracks[t]; int trackRetries = 0; - // First track of each session has at least 150 sectors of pregap and is not readable always + // First track of each session has at least 150 sectors of pregap and is not always readable if(tracks.Where(t => t.TrackSession == track.TrackSession).OrderBy(t => t.TrackSequence). FirstOrDefault().TrackSequence == track.TrackSequence) { @@ -190,8 +190,9 @@ namespace Aaru.Core.Devices.Dumping continue; } - if(t > 0 && - tracks[t - 1].TrackType == tracks[t].TrackType) + if(t > 0 && + tracks[t - 1].TrackType == tracks[t].TrackType && + dumping) { AaruConsole.DebugWriteLine("Pregap calculator", "Skipping track {0}", track.TrackSequence); @@ -562,7 +563,21 @@ namespace Aaru.Core.Devices.Dumping for(int i = 0; i < tracks.Length; i++) { - tracks[i].TrackPregap = (ulong)pregaps[tracks[i].TrackSequence]; + tracks[i].TrackPregap = (ulong)pregaps[tracks[i].TrackSequence]; + + if(dumping) + { + // Minus five, to ensure dumping will fix if there is a pregap LBA 0 + int red = 5; + + while(tracks[i].TrackPregap > 0 && + red > 0) + { + tracks[i].TrackPregap--; + red--; + } + } + tracks[i].TrackStartSector -= tracks[i].TrackPregap; #if DEBUG