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;
}