diff --git a/Aaru.Core/Media/CompactDisc.cs b/Aaru.Core/Media/CompactDisc.cs index d1ee06c00..b7a04d0e6 100644 --- a/Aaru.Core/Media/CompactDisc.cs +++ b/Aaru.Core/Media/CompactDisc.cs @@ -90,7 +90,7 @@ public static class CompactDisc bool indexesChanged = CheckIndexesFromSubchannel(deSub, isrcs, currentTrack, ref mcn, tracks, dumpLog, updateStatus, smallestPregapLbaPerTrack, dumping, - out newPregapSectors); + out newPregapSectors, sectorAddress); if(!fixSubchannelPosition || desiredSubchannel == MmcSubchannel.None) @@ -303,7 +303,7 @@ public static class CompactDisc /// Check subchannel for indexes /// De-interleaved subchannel /// List of ISRCs - /// Current track number + /// Current track number /// Disc's MCN /// List of tracks /// Dumping log @@ -311,11 +311,11 @@ public static class CompactDisc /// List of smallest known pregap per track /// Set if we are dumping, otherwise converting /// true if indexes have changed, false otherwise - static bool CheckIndexesFromSubchannel(byte[] deSub, Dictionary isrcs, byte currentTrack, + static bool CheckIndexesFromSubchannel(byte[] deSub, Dictionary isrcs, byte currentTrackNumber, ref string mcn, Track[] tracks, DumpLog dumpLog, UpdateStatusHandler updateStatus, Dictionary smallestPregapLbaPerTrack, bool dumping, - out List newPregapSectors) + out List newPregapSectors, ulong sectorAddress) { var status = false; newPregapSectors = new List(); @@ -342,22 +342,30 @@ public static class CompactDisc if(!crcOk) continue; - if(!isrcs.ContainsKey(currentTrack)) + if(!isrcs.ContainsKey(currentTrackNumber)) { - dumpLog?.WriteLine($"Found new ISRC {isrc} for track {currentTrack}."); - updateStatus?.Invoke($"Found new ISRC {isrc} for track {currentTrack}."); + dumpLog?.WriteLine($"Found new ISRC {isrc} for track {currentTrackNumber}."); + updateStatus?.Invoke($"Found new ISRC {isrc} for track {currentTrackNumber}."); + + isrcs[currentTrackNumber] = isrc; } - else if(isrcs[currentTrack] != isrc) + else if(isrcs[currentTrackNumber] != isrc) { - dumpLog?. - WriteLine($"ISRC for track {currentTrack} changed from {isrcs[currentTrack]} to {isrc}."); + Track currentTrack = + tracks.FirstOrDefault(t => sectorAddress + (ulong)subPos / 96 >= t.StartSector); - updateStatus?. - Invoke($"ISRC for track {currentTrack} changed from {isrcs[currentTrack]} to {isrc}."); + if(currentTrack?.Sequence == currentTrackNumber) + { + dumpLog?. + WriteLine($"ISRC for track {currentTrackNumber} changed from {isrcs[currentTrackNumber]} to {isrc}."); + + updateStatus?. + Invoke($"ISRC for track {currentTrackNumber} changed from {isrcs[currentTrackNumber]} to {isrc}."); + + isrcs[currentTrackNumber] = isrc; + } } - isrcs[currentTrack] = isrc; - break; }