diff --git a/Aaru.Images/AaruFormat/Properties.cs b/Aaru.Images/AaruFormat/Properties.cs index fc34cd41e..d7b98f9ed 100644 --- a/Aaru.Images/AaruFormat/Properties.cs +++ b/Aaru.Images/AaruFormat/Properties.cs @@ -5,7 +5,9 @@ using Aaru.CommonTypes; using Aaru.CommonTypes.AaruMetadata; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Structs; +using Humanizer; using Partition = Aaru.CommonTypes.Partition; +using Track = Aaru.CommonTypes.Structs.Track; namespace Aaru.Images; @@ -48,7 +50,52 @@ public sealed partial class AaruFormat public string Author => Authors.NataliaPortillo; /// - public List Partitions { get; private set; } + public List Partitions + { + get + { + if(IsTape) + { + if(TapePartitions is null) return null; + + ulong i = 0; + + return TapePartitions.ConvertAll(part => new Partition + { + Start = part.FirstBlock, + Length = part.LastBlock - part.FirstBlock + 1, + Scheme = "Tape", + Sequence = i++, + Type = "Tape Partition", + Name = $"Partition {part.Number}" + }); + } + + if(Tracks is null) return null; + + ulong currentTrackOffset = 0; + List partitions = []; + + foreach(Track track in Tracks.OrderBy(t => t.StartSector)) + { + partitions.Add(new Partition + { + Sequence = track.Sequence, + Type = track.Type.Humanize(), + Name = string.Format(Localization.Track_0, track.Sequence), + Offset = currentTrackOffset, + Start = (ulong)track.Indexes[1], + Size = (track.EndSector - (ulong)track.Indexes[1] + 1) * (ulong)track.BytesPerSector, + Length = track.EndSector - (ulong)track.Indexes[1] + 1, + Scheme = Localization.Optical_disc_track + }); + + currentTrackOffset += (track.EndSector - track.StartSector + 1) * (ulong)track.BytesPerSector; + } + + return partitions; + } + } /// public List DumpHardware { get; private set; }