// /*************************************************************************** // Aaru Data Preservation Suite // ---------------------------------------------------------------------------- // // Filename : OpticalDisc.cs // Author(s) : Natalia Portillo // // Component : Metadata. // // --[ Description ] ---------------------------------------------------------- // // Defines format for metadata. // // --[ License ] -------------------------------------------------------------- // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // ---------------------------------------------------------------------------- // Copyright © 2011-2025 Natalia Portillo // ****************************************************************************/ using System; using System.Collections.Generic; using System.Text.Json.Serialization; using Schemas; // ReSharper disable UnusedMember.Global // ReSharper disable ClassNeverInstantiated.Global namespace Aaru.CommonTypes.AaruMetadata; public class OpticalDisc { public Image Image { get; set; } public ulong Size { get; set; } public Sequence Sequence { get; set; } public Layers Layers { get; set; } public List Checksums { get; set; } public string PartNumber { get; set; } public string SerialNumber { get; set; } public List RingCode { get; set; } public List MasteringSid { get; set; } public List Toolstamp { get; set; } public List MouldSid { get; set; } public List MouldText { get; set; } public string DiscType { get; set; } public string DiscSubType { get; set; } public int? Offset { get; set; } public uint[] Tracks { get; set; } public uint Sessions { get; set; } public string CopyProtection { get; set; } public Dimensions Dimensions { get; set; } public Case Case { get; set; } public Scans Scans { get; set; } public Dump Pfi { get; set; } public Dump Dmi { get; set; } public Dump Cmi { get; set; } public Dump Bca { get; set; } public Dump Atip { get; set; } public Dump Adip { get; set; } public Dump Pma { get; set; } public Dump Dds { get; set; } public Dump Sai { get; set; } public Dump LastRmd { get; set; } public Dump Pri { get; set; } public Dump MediaID { get; set; } public Dump Pfir { get; set; } public Dump Dcb { get; set; } public Dump Di { get; set; } public Dump Pac { get; set; } public Dump Toc { get; set; } public Dump LeadInCdText { get; set; } public List FirstTrackPregrap { get; set; } public List LeadIn { get; set; } public List LeadOut { get; set; } public Xbox Xbox { get; set; } public Ps3Encryption Ps3Encryption { get; set; } public string MediaCatalogueNumber { get; set; } public List Track { get; set; } public List DumpHardware { get; set; } [Obsolete("Will be removed in Aaru 7")] public static implicit operator OpticalDisc(OpticalDiscType cicm) { if(cicm is null) return null; var disc = new OpticalDisc { Image = cicm.Image, Size = cicm.Size, Sequence = cicm.Sequence, Layers = cicm.Layers, PartNumber = cicm.PartNumber, SerialNumber = cicm.SerialNumber, DiscType = cicm.DiscType, DiscSubType = cicm.DiscSubType, Offset = cicm.OffsetSpecified ? cicm.Offset : null, Tracks = cicm.Tracks, Sessions = cicm.Sessions, CopyProtection = cicm.CopyProtection, Dimensions = cicm.Dimensions, Case = cicm.Case, Scans = cicm.Scans, Pfi = cicm.PFI, Dmi = cicm.DMI, Cmi = cicm.CMI, Bca = cicm.BCA, Atip = cicm.ATIP, Adip = cicm.ADIP, Pma = cicm.PMA, Dds = cicm.DDS, Sai = cicm.SAI, LastRmd = cicm.LastRMD, Pri = cicm.PRI, MediaID = cicm.MediaID, Pfir = cicm.PFIR, Dcb = cicm.DCB, Pac = cicm.PAC, Toc = cicm.TOC, LeadInCdText = cicm.LeadInCdText, Xbox = cicm.Xbox, Ps3Encryption = cicm.PS3Encryption, MediaCatalogueNumber = cicm.MediaCatalogueNumber }; if(cicm.Checksums is not null) { disc.Checksums = []; foreach(Schemas.ChecksumType chk in cicm.Checksums) disc.Checksums.Add(chk); } if(cicm.RingCode is not null) { disc.RingCode = []; foreach(LayeredTextType lt in cicm.RingCode) disc.RingCode.Add(lt); } if(cicm.MasteringSID is not null) { disc.MasteringSid = []; foreach(LayeredTextType lt in cicm.MasteringSID) disc.MasteringSid.Add(lt); } if(cicm.Toolstamp is not null) { disc.Toolstamp = []; foreach(LayeredTextType lt in cicm.Toolstamp) disc.Toolstamp.Add(lt); } if(cicm.MouldSID is not null) { disc.MouldSid = []; foreach(LayeredTextType lt in cicm.MouldSID) disc.MouldSid.Add(lt); } if(cicm.MouldText is not null) { disc.MouldText = []; foreach(LayeredTextType lt in cicm.MouldText) disc.MouldText.Add(lt); } if(cicm.FirstTrackPregrap is not null) { disc.FirstTrackPregrap = []; foreach(BorderType lt in cicm.FirstTrackPregrap) disc.FirstTrackPregrap.Add(lt); } if(cicm.LeadIn is not null) { disc.LeadIn = []; foreach(BorderType lt in cicm.LeadIn) disc.LeadIn.Add(lt); } if(cicm.LeadOut is not null) { disc.LeadOut = []; foreach(BorderType lt in cicm.LeadOut) disc.LeadOut.Add(lt); } if(cicm.Track is not null) { disc.Track = []; foreach(Schemas.TrackType lt in cicm.Track) disc.Track.Add(lt); } if(cicm.DumpHardwareArray is null) return disc; disc.DumpHardware = []; foreach(DumpHardwareType hw in cicm.DumpHardwareArray) disc.DumpHardware.Add(hw); return disc; } } public class Track { public Image Image { get; set; } public ulong Size { get; set; } public TrackSequence Sequence { get; set; } public string StartMsf { get; set; } public string EndMsf { get; set; } public ulong StartSector { get; set; } public ulong EndSector { get; set; } public List Indexes { get; set; } public TrackFlags Flags { get; set; } public string ISRC { get; set; } public TrackType Type { get; set; } public uint BytesPerSector { get; set; } public string AccoustID { get; set; } public List Checksums { get; set; } public SubChannel SubChannel { get; set; } public List FileSystemInformation { get; set; } [Obsolete("Will be removed in Aaru 7")] public static implicit operator Track(Schemas.TrackType cicm) { if(cicm is null) return null; var trk = new Track { Image = cicm.Image, Size = cicm.Size, Sequence = cicm.Sequence, StartMsf = cicm.StartMSF, EndMsf = cicm.EndMSF, StartSector = cicm.StartSector, EndSector = cicm.EndSector, Flags = cicm.Flags, ISRC = cicm.ISRC, Type = (TrackType)cicm.TrackType1, BytesPerSector = cicm.BytesPerSector, AccoustID = cicm.AccoustID, SubChannel = cicm.SubChannel }; if(cicm.Indexes is not null) { trk.Indexes = []; foreach(TrackIndexType idx in cicm.Indexes) trk.Indexes.Add(idx); } if(cicm.Checksums is not null) { trk.Checksums = []; foreach(Schemas.ChecksumType chk in cicm.Checksums) trk.Checksums.Add(chk); } if(cicm.FileSystemInformation is null) return trk; trk.FileSystemInformation = []; foreach(PartitionType fs in cicm.FileSystemInformation) trk.FileSystemInformation.Add(fs); return trk; } } public class TrackSequence { public uint Number { get; set; } public uint Session { get; set; } [Obsolete("Will be removed in Aaru 7")] public static implicit operator TrackSequence(TrackSequenceType cicm) => cicm is null ? null : new TrackSequence { Number = cicm.TrackNumber, Session = cicm.Session }; } public class TrackIndex { public ushort Index { get; set; } public int Value { get; set; } [Obsolete("Will be removed in Aaru 7")] public static implicit operator TrackIndex(TrackIndexType cicm) => cicm is null ? null : new TrackIndex { Index = cicm.index, Value = cicm.Value }; } public class TrackFlags { public bool Quadraphonic { get; set; } public bool Data { get; set; } public bool CopyPermitted { get; set; } public bool PreEmphasis { get; set; } [Obsolete("Will be removed in Aaru 7")] public static implicit operator TrackFlags(TrackFlagsType cicm) => cicm is null ? null : new TrackFlags { CopyPermitted = cicm.CopyPermitted, Data = cicm.Data, PreEmphasis = cicm.PreEmphasis, Quadraphonic = cicm.Quadraphonic }; } [JsonConverter(typeof(JsonStringEnumMemberConverter))] public enum TrackType { Audio, Mode0, Mode1, Mode2, Mode2Form1, Mode2Form2, Dvd, HdDvd, Bluray, Ddcd } public class SubChannel { public Image Image { get; set; } public ulong Size { get; set; } public List Checksums { get; set; } [Obsolete("Will be removed in Aaru 7")] public static implicit operator SubChannel(SubChannelType cicm) { if(cicm is null) return null; var subchannel = new SubChannel { Image = cicm.Image, Size = cicm.Size }; if(cicm.Checksums is null) return subchannel; subchannel.Checksums = []; foreach(Schemas.ChecksumType chk in cicm.Checksums) subchannel.Checksums.Add(chk); return subchannel; } }