diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs index 228543659..bfe222e5c 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs @@ -86,7 +86,7 @@ namespace Aaru.Core.Devices.Dumping bool read12, bool read16, bool readcd, int sectorsForOffset, uint subSize, MmcSubchannel supportedSubchannel, bool supportsLongSectors, ref double totalDuration, Track[] tracks, SubchannelLog subLog, MmcSubchannel desiredSubchannel, - Dictionary isrcs, ref string mcn, ExtentsInt subchannelExtents) + Dictionary isrcs, ref string mcn, HashSet subchannelExtents) { ulong sectorSpeedStart = 0; // Used to calculate correct speed DateTime timeSpeedStart = DateTime.UtcNow; // Time of start for speed calculation diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs index 09129e9bb..6548bee04 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -115,7 +115,7 @@ namespace Aaru.Core.Devices.Dumping bool bcdSubchannel = false; // Subchannel positioning is in BCD Dictionary isrcs = new Dictionary(); string mcn = null; - var subchannelExtents = new ExtentsInt(); + HashSet subchannelExtents = new HashSet(); Dictionary mediaTags = new Dictionary(); // Media tags @@ -852,7 +852,7 @@ namespace Aaru.Core.Devices.Dumping if(supportedSubchannel != MmcSubchannel.None && desiredSubchannel != MmcSubchannel.None) { - subchannelExtents = new ExtentsInt(); + subchannelExtents = new HashSet(); _resume.BadSubchannels ??= new List(); @@ -860,7 +860,8 @@ namespace Aaru.Core.Devices.Dumping subchannelExtents.Add(sub); if(_resume.NextBlock < blocks) - subchannelExtents.Add((int)_resume.NextBlock, (int)(blocks - 1)); + for(ulong i = _resume.NextBlock; i < blocks; i++) + subchannelExtents.Add((int)i); } if(_resume.NextBlock > 0) @@ -1106,18 +1107,7 @@ namespace Aaru.Core.Devices.Dumping currentTry.Extents = ExtentsConverter.ToMetadata(extents); _resume.BadSubchannels = new List(); - - foreach(Tuple extent in subchannelExtents.ToArray()) - { - for(int sub = extent.Item1; sub <= extent.Item2; sub++) - { - if(sub >= (int)_resume.NextBlock) - continue; - - _resume.BadSubchannels.Add(sub); - } - } - + _resume.BadSubchannels.AddRange(subchannelExtents); _resume.BadSubchannels.Sort(); // TODO: Disc ID diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs index 92a99fce4..97ff24af5 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs @@ -55,7 +55,7 @@ namespace Aaru.Core.Devices.Dumping ExtentsULong extents, int offsetBytes, bool readcd, int sectorsForOffset, uint subSize, MmcSubchannel supportedSubchannel, ref double totalDuration, SubchannelLog subLog, MmcSubchannel desiredSubchannel, Track[] tracks, Dictionary isrcs, - ref string mcn, ExtentsInt subchannelExtents) + ref string mcn, HashSet subchannelExtents) { bool sense = true; // Sense indicator byte[] cmdBuf = null; // Data buffer @@ -447,7 +447,7 @@ namespace Aaru.Core.Devices.Dumping void RetrySubchannel(bool readcd, uint subSize, MmcSubchannel supportedSubchannel, ref double totalDuration, SubchannelLog subLog, MmcSubchannel desiredSubchannel, Track[] tracks, - Dictionary isrcs, ref string mcn, ExtentsInt subchannelExtents) + Dictionary isrcs, ref string mcn, HashSet subchannelExtents) { bool sense = true; // Sense indicator byte[] cmdBuf = null; // Data buffer @@ -495,18 +495,7 @@ namespace Aaru.Core.Devices.Dumping cdRepeatRetry: _resume.BadSubchannels = new List(); - - foreach(Tuple extent in subchannelExtents.ToArray()) - { - for(int sub = extent.Item1; sub <= extent.Item2; sub++) - { - if(sub >= (int)_resume.NextBlock) - continue; - - _resume.BadSubchannels.Add(sub); - } - } - + _resume.BadSubchannels.AddRange(subchannelExtents); _resume.BadSubchannels.Sort(); if(!forward) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs index 186457e4f..b82061d90 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs @@ -75,7 +75,7 @@ namespace Aaru.Core.Devices.Dumping bool read6, bool read10, bool read12, bool read16, bool readcd, MmcSubchannel supportedSubchannel, uint subSize, ref double totalDuration, SubchannelLog subLog, MmcSubchannel desiredSubchannel, Dictionary isrcs, - ref string mcn, Track[] tracks, ExtentsInt subchannelExtents) + ref string mcn, Track[] tracks, HashSet subchannelExtents) { byte[] cmdBuf = null; // Data buffer const uint sectorSize = 2352; // Full sector size @@ -239,7 +239,7 @@ namespace Aaru.Core.Devices.Dumping bool read6, bool read10, bool read12, bool read16, bool readcd, MmcSubchannel supportedSubchannel, uint subSize, ref double totalDuration, SubchannelLog subLog, MmcSubchannel desiredSubchannel, Dictionary isrcs, - ref string mcn, Track[] tracks, ExtentsInt subchannelExtents) + ref string mcn, Track[] tracks, HashSet subchannelExtents) { byte[] cmdBuf = null; // Data buffer const uint sectorSize = 2352; // Full sector size diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Subchannel.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Subchannel.cs index 9061600fb..3d6c3f7d8 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Subchannel.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Subchannel.cs @@ -34,7 +34,6 @@ using System; using System.Collections.Generic; using Aaru.Checksums; using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Extents; using Aaru.CommonTypes.Structs; using Aaru.Core.Logging; using Aaru.Decoders.CD; @@ -72,7 +71,7 @@ namespace Aaru.Core.Devices.Dumping bool WriteSubchannelToImage(MmcSubchannel supportedSubchannel, MmcSubchannel desiredSubchannel, byte[] sub, ulong sectorAddress, uint length, SubchannelLog subLog, Dictionary isrcs, byte currentTrack, ref string mcn, Track[] tracks, - ExtentsInt subchannelExtents) + HashSet subchannelExtents) { if(supportedSubchannel == MmcSubchannel.Q16) sub = Subchannel.ConvertQToRaw(sub); diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs index 1f6188151..5323cdc73 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs @@ -53,7 +53,7 @@ namespace Aaru.Core.Devices.Dumping bool read16, bool readcd, int sectorsForOffset, uint subSize, MmcSubchannel supportedSubchannel, bool supportsLongSectors, ref double totalDuration, SubchannelLog subLog, MmcSubchannel desiredSubchannel, Track[] tracks, - Dictionary isrcs, ref string mcn, ExtentsInt subchannelExtents) + Dictionary isrcs, ref string mcn, HashSet subchannelExtents) { DateTime start; DateTime end;