mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Fix setting index sectors on multi-file CDRWin disc images. Fixes #643
This commit is contained in:
@@ -1238,6 +1238,28 @@ namespace Aaru.DiscImages
|
|||||||
foreach(CdrWinTrack track in _discImage.Tracks)
|
foreach(CdrWinTrack track in _discImage.Tracks)
|
||||||
_imageInfo.ImageSize += track.Bps * track.Sectors;
|
_imageInfo.ImageSize += track.Bps * track.Sectors;
|
||||||
|
|
||||||
|
int currentSector = 0;
|
||||||
|
int currentFileStartSector = 0;
|
||||||
|
string currentFilePath = "";
|
||||||
|
|
||||||
|
foreach(CdrWinTrack track in _discImage.Tracks)
|
||||||
|
{
|
||||||
|
if(track.TrackFile.DataFilter.GetBasePath() != currentFilePath)
|
||||||
|
{
|
||||||
|
currentFileStartSector = currentSector;
|
||||||
|
currentFilePath = track.TrackFile.DataFilter.GetBasePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary<ushort, int> newIndexes = new Dictionary<ushort, int>();
|
||||||
|
|
||||||
|
foreach(KeyValuePair<ushort, int> index in track.Indexes)
|
||||||
|
newIndexes[index.Key] = index.Value + currentFileStartSector;
|
||||||
|
|
||||||
|
track.Indexes = newIndexes;
|
||||||
|
|
||||||
|
currentSector += (int)track.Sectors;
|
||||||
|
}
|
||||||
|
|
||||||
for(int s = 0; s < sessions.Length; s++)
|
for(int s = 0; s < sessions.Length; s++)
|
||||||
{
|
{
|
||||||
if(!_discImage.Tracks[(int)sessions[s].StartTrack - 1].Indexes.
|
if(!_discImage.Tracks[(int)sessions[s].StartTrack - 1].Indexes.
|
||||||
@@ -1287,8 +1309,6 @@ namespace Aaru.DiscImages
|
|||||||
Partitions = new List<Partition>();
|
Partitions = new List<Partition>();
|
||||||
|
|
||||||
ulong partitionSequence = 0;
|
ulong partitionSequence = 0;
|
||||||
ulong previousPartitionsSize = 0;
|
|
||||||
string previousFile = _discImage.Tracks[0].TrackFile.DataFilter.GetBasePath();
|
|
||||||
|
|
||||||
_offsetMap = new Dictionary<uint, ulong>();
|
_offsetMap = new Dictionary<uint, ulong>();
|
||||||
|
|
||||||
@@ -1315,27 +1335,17 @@ namespace Aaru.DiscImages
|
|||||||
|
|
||||||
partitionSequence++;
|
partitionSequence++;
|
||||||
|
|
||||||
if(_discImage.Tracks[i].TrackFile.DataFilter.GetBasePath() != previousFile)
|
|
||||||
{
|
|
||||||
previousPartitionsSize += _discImage.Tracks[i - 1].Sectors;
|
|
||||||
previousFile = _discImage.Tracks[i].TrackFile.DataFilter.GetBasePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_discImage.Tracks[i].Indexes.TryGetValue(0, out int idx0))
|
if(_discImage.Tracks[i].Indexes.TryGetValue(0, out int idx0))
|
||||||
_offsetMap.Add(_discImage.Tracks[i].Sequence, (ulong)idx0 + previousPartitionsSize);
|
_offsetMap.Add(_discImage.Tracks[i].Sequence, (ulong)idx0);
|
||||||
else if(_discImage.IsRedumpGigadisc &&
|
else if(_discImage.IsRedumpGigadisc &&
|
||||||
_discImage.Tracks[i].Sequence == 3)
|
_discImage.Tracks[i].Sequence == 3)
|
||||||
{
|
|
||||||
_offsetMap.Add(_discImage.Tracks[i].Sequence, gdRomSession2Offset);
|
_offsetMap.Add(_discImage.Tracks[i].Sequence, gdRomSession2Offset);
|
||||||
previousPartitionsSize = gdRomSession2Offset;
|
|
||||||
}
|
|
||||||
else if(_discImage.Tracks[i].Sequence > 1)
|
else if(_discImage.Tracks[i].Sequence > 1)
|
||||||
_offsetMap.Add(_discImage.Tracks[i].Sequence,
|
_offsetMap.Add(_discImage.Tracks[i].Sequence,
|
||||||
(ulong)(_discImage.Tracks[i].Indexes[1] - _discImage.Tracks[i].Pregap) +
|
(ulong)(_discImage.Tracks[i].Indexes[1] - _discImage.Tracks[i].Pregap));
|
||||||
previousPartitionsSize);
|
|
||||||
else
|
else
|
||||||
_offsetMap.Add(_discImage.Tracks[i].Sequence,
|
_offsetMap.Add(_discImage.Tracks[i].Sequence,
|
||||||
(ulong)_discImage.Tracks[i].Indexes[1] + previousPartitionsSize);
|
(ulong)_discImage.Tracks[i].Indexes[1]);
|
||||||
|
|
||||||
Partitions.Add(partition);
|
Partitions.Add(partition);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user