// /*************************************************************************** // Aaru Data Preservation Suite // ---------------------------------------------------------------------------- // // Filename : Dimensions.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-2023 Natalia Portillo // ****************************************************************************/ // ReSharper disable UnusedMember.Global // ReSharper disable ClassNeverInstantiated.Global using System; using Schemas; namespace Aaru.CommonTypes.AaruMetadata; public class Dimensions { public double? Diameter { get; set; } public double? Height { get; set; } public double? Width { get; set; } public double Thickness { get; set; } [Obsolete("Will be removed in Aaru 7")] public static implicit operator Dimensions(DimensionsType cicm) => cicm is null ? null : new Dimensions { Diameter = cicm.DiameterSpecified ? cicm.Diameter : null, Height = cicm.HeightSpecified ? cicm.Height : null, Width = cicm.WidthSpecified ? cicm.Width : null, Thickness = cicm.Thickness }; /// Gets the physical dimensions, in metadata expected format, for a given media type /// Media type /// Dimensions metadata public static Dimensions FromMediaType(MediaType mediaType) { var dmns = new Dimensions(); switch(mediaType) { #region 5.25" floppy disk case MediaType.Apple32SS: case MediaType.Apple32DS: case MediaType.Apple33SS: case MediaType.Apple33DS: case MediaType.AppleFileWare: case MediaType.DOS_525_SS_DD_8: case MediaType.DOS_525_SS_DD_9: case MediaType.DOS_525_DS_DD_8: case MediaType.DOS_525_DS_DD_9: case MediaType.DOS_525_HD: case MediaType.XDF_525: case MediaType.ACORN_525_SS_SD_40: case MediaType.ACORN_525_SS_SD_80: case MediaType.ACORN_525_SS_DD_40: case MediaType.ACORN_525_SS_DD_80: case MediaType.ACORN_525_DS_DD: case MediaType.ATARI_525_SD: case MediaType.ATARI_525_ED: case MediaType.ATARI_525_DD: case MediaType.CBM_1540: case MediaType.CBM_1540_Ext: case MediaType.CBM_1571: case MediaType.ECMA_66: case MediaType.ECMA_70: case MediaType.NEC_525_HD: case MediaType.ECMA_78: case MediaType.ECMA_78_2: case MediaType.ECMA_99_8: case MediaType.ECMA_99_15: case MediaType.ECMA_99_26: case MediaType.FDFORMAT_525_DD: case MediaType.FDFORMAT_525_HD: case MediaType.MetaFloppy_Mod_I: case MediaType.MetaFloppy_Mod_II: // According to ECMA-99 et al dmns.Height = 133.3; dmns.Width = 133.3; dmns.Thickness = 1.65; return dmns; #endregion 5.25" floppy disk #region 3.5" floppy disk case MediaType.AppleSonySS: case MediaType.AppleSonyDS: case MediaType.DOS_35_SS_DD_8: case MediaType.DOS_35_SS_DD_9: case MediaType.DOS_35_DS_DD_8: case MediaType.DOS_35_DS_DD_9: case MediaType.DOS_35_HD: case MediaType.DOS_35_ED: case MediaType.DMF: case MediaType.DMF_82: case MediaType.XDF_35: case MediaType.ACORN_35_DS_DD: case MediaType.CBM_35_DD: case MediaType.CBM_AMIGA_35_DD: case MediaType.CBM_AMIGA_35_HD: case MediaType.FDFORMAT_35_DD: case MediaType.FDFORMAT_35_HD: case MediaType.NEC_35_HD_8: case MediaType.NEC_35_HD_15: case MediaType.Floptical: case MediaType.HiFD: case MediaType.UHD144: case MediaType.Apricot_35: case MediaType.FD32MB: // According to ECMA-100 et al dmns.Height = 94; dmns.Width = 90; dmns.Thickness = 3.3; return dmns; #endregion 3.5" floppy disk #region 8" floppy disk case MediaType.IBM23FD: case MediaType.IBM33FD_128: case MediaType.IBM33FD_256: case MediaType.IBM33FD_512: case MediaType.IBM43FD_128: case MediaType.IBM43FD_256: case MediaType.IBM53FD_256: case MediaType.IBM53FD_512: case MediaType.IBM53FD_1024: case MediaType.RX01: case MediaType.RX02: case MediaType.NEC_8_SD: case MediaType.NEC_8_DD: case MediaType.ECMA_54: case MediaType.ECMA_59: case MediaType.ECMA_69_8: case MediaType.ECMA_69_15: case MediaType.ECMA_69_26: // According to ECMA-59 et al dmns.Height = 203.2; dmns.Width = 203.2; dmns.Thickness = 1.65; return dmns; #endregion 8" floppy disk #region 356mm magneto optical case MediaType.ECMA_260: case MediaType.ECMA_260_Double: // According to ECMA-260 et al dmns.Height = 421.84; dmns.Width = 443.76; dmns.Thickness = 25.4; return dmns; #endregion 356mm magneto optical #region 300mm magneto optical case MediaType.ECMA_189: case MediaType.ECMA_190: case MediaType.ECMA_317: // According to ECMA-317 et al dmns.Height = 340; dmns.Width = 320; dmns.Thickness = 17; return dmns; #endregion 300mm magneto optical #region 5.25" magneto optical case MediaType.ECMA_153: case MediaType.ECMA_153_512: case MediaType.ECMA_183_512: case MediaType.ECMA_183: case MediaType.ECMA_184_512: case MediaType.ECMA_184: case MediaType.ECMA_195: case MediaType.ECMA_195_512: case MediaType.ECMA_238: case MediaType.ECMA_280: case MediaType.ECMA_322: case MediaType.ECMA_322_2k: case MediaType.UDO: case MediaType.UDO2: case MediaType.UDO2_WORM: case MediaType.ISO_15286: case MediaType.ISO_15286_1024: case MediaType.ISO_15286_512: case MediaType.ISO_10089: case MediaType.ISO_10089_512: case MediaType.ECMA_322_1k: case MediaType.ECMA_322_512: case MediaType.ISO_14517: case MediaType.ISO_14517_512: // According to ECMA-183 et al dmns.Height = 153; dmns.Width = 135; dmns.Thickness = 11; return dmns; #endregion 5.25" magneto optical #region 3.5" magneto optical case MediaType.ECMA_154: case MediaType.ECMA_201: case MediaType.ECMA_201_ROM: case MediaType.ECMA_223: case MediaType.ECMA_223_512: case MediaType.GigaMo: case MediaType.GigaMo2: case MediaType.ISO_15041_512: // According to ECMA-154 et al dmns.Height = 94; dmns.Width = 90; dmns.Thickness = 6; return dmns; #endregion 3.5" magneto optical case MediaType.PD650: case MediaType.PD650_WORM: dmns.Height = 135; dmns.Width = 124; dmns.Thickness = 7.8; return dmns; case MediaType.ECMA_239: dmns.Height = 97; dmns.Width = 92; dmns.Thickness = 5; return dmns; case MediaType.MMCmicro: dmns.Height = 14; dmns.Width = 12; dmns.Thickness = 1.1; return dmns; case MediaType.MemoryStickMicro: dmns.Height = 15; dmns.Width = 12.5; dmns.Thickness = 1.2; return dmns; case MediaType.microSD: dmns.Height = 11; dmns.Width = 15; dmns.Thickness = 1; return dmns; case MediaType.miniSD: dmns.Height = 21.5; dmns.Width = 20; dmns.Thickness = 1.4; return dmns; case MediaType.QIC3010: case MediaType.QIC3020: case MediaType.QIC3080: case MediaType.QIC3095: case MediaType.QIC320: case MediaType.QIC40: case MediaType.QIC80: dmns.Height = 20; dmns.Width = 21.5; dmns.Thickness = 1.6; return dmns; case MediaType.RSMMC: dmns.Height = 18; dmns.Width = 24; dmns.Thickness = 1.4; return dmns; case MediaType.MMC: dmns.Height = 32; dmns.Width = 24; dmns.Thickness = 1.4; return dmns; case MediaType.SecureDigital: dmns.Height = 32; dmns.Width = 24; dmns.Thickness = 2.1; return dmns; case MediaType.xD: dmns.Height = 20; dmns.Width = 25; dmns.Thickness = 1.78; return dmns; case MediaType.XQD: dmns.Height = 38.5; dmns.Width = 29.8; dmns.Thickness = 3.8; return dmns; case MediaType.MemoryStickDuo: case MediaType.MemoryStickProDuo: dmns.Height = 20; dmns.Width = 31; dmns.Thickness = 1.6; return dmns; case MediaType.Nintendo3DSGameCard: case MediaType.NintendoDSGameCard: case MediaType.NintendoDSiGameCard: dmns.Height = 35; dmns.Width = 33; dmns.Thickness = 3.8; return dmns; case MediaType.DataPlay: dmns.Height = 42; dmns.Width = 33.5; dmns.Thickness = 3; return dmns; case MediaType.Microdrive: dmns.Height = 44; dmns.Width = 34; dmns.Thickness = 8; return dmns; case MediaType.ExpressCard34: dmns.Height = 75; dmns.Width = 34; dmns.Thickness = 5; return dmns; case MediaType.SmartMedia: dmns.Height = 45; dmns.Width = 37; dmns.Thickness = 0.76; return dmns; case MediaType.MiniCard: dmns.Height = 45; dmns.Width = 37; dmns.Thickness = 3.5; return dmns; case MediaType.PlayStationMemoryCard: case MediaType.PlayStationMemoryCard2: dmns.Height = 55.7; dmns.Width = 41.5; dmns.Thickness = 7; return dmns; case MediaType.CFast: case MediaType.CompactFlash: dmns.Height = 36; dmns.Width = 43; dmns.Thickness = 3.3; return dmns; case MediaType.CompactFlashType2: dmns.Height = 36; dmns.Width = 43; dmns.Thickness = 5; return dmns; case MediaType.ZXMicrodrive: dmns.Height = 36; dmns.Width = 43; dmns.Thickness = 5; return dmns; case MediaType.MemoryStick: case MediaType.MemoryStickPro: dmns.Height = 21; dmns.Width = 50; dmns.Thickness = 2.6; return dmns; case MediaType.PocketZip: dmns.Height = 54.5; dmns.Width = 50; dmns.Thickness = 2; return dmns; case MediaType.ExpressCard54: dmns.Height = 75; dmns.Width = 54; dmns.Thickness = 5; return dmns; case MediaType.PCCardTypeI: dmns.Height = 85.6; dmns.Width = 54; dmns.Thickness = 3.3; return dmns; case MediaType.PCCardTypeII: dmns.Height = 85.6; dmns.Width = 54; dmns.Thickness = 5; return dmns; case MediaType.PCCardTypeIII: dmns.Height = 85.6; dmns.Width = 54; dmns.Thickness = 10.5; return dmns; case MediaType.PCCardTypeIV: dmns.Height = 85.6; dmns.Width = 54; dmns.Thickness = 16; return dmns; case MediaType.DataStore: dmns.Height = 86.5; dmns.Width = 54; dmns.Thickness = 2.5; return dmns; case MediaType.VideoFloppy: dmns.Height = 54; dmns.Width = 60; dmns.Thickness = 3.5; return dmns; case MediaType.VXA1: case MediaType.VXA2: case MediaType.VXA3: dmns.Height = 95; dmns.Width = 62.5; dmns.Thickness = 15; return dmns; case MediaType.MiniDV: dmns.Height = 47.5; dmns.Width = 66; dmns.Thickness = 12; return dmns; case MediaType.Wafer: dmns.Height = 46.8; dmns.Width = 67.1; dmns.Thickness = 7.9; return dmns; case MediaType.NintendoDiskCard: dmns.Height = 76.2; dmns.Width = 71.12; dmns.Thickness = 0; return dmns; case MediaType.HiMD: case MediaType.MD: case MediaType.MDData: case MediaType.MDData2: case MediaType.MD60: case MediaType.MD74: case MediaType.MD80: dmns.Height = 68; dmns.Width = 71.5; dmns.Thickness = 4.8; return dmns; case MediaType.DAT160: case MediaType.DAT320: case MediaType.DAT72: case MediaType.DDS1: case MediaType.DDS2: case MediaType.DDS3: case MediaType.DDS4: case MediaType.DigitalAudioTape: dmns.Height = 54; dmns.Width = 73; dmns.Thickness = 10.5; return dmns; case MediaType.CompactFloppy: dmns.Height = 100; dmns.Width = 80; dmns.Thickness = 5; return dmns; case MediaType.DECtapeII: dmns.Height = 60; dmns.Width = 81; dmns.Thickness = 13; return dmns; case MediaType.Ditto: dmns.Height = 60; dmns.Width = 81; dmns.Thickness = 14; return dmns; case MediaType.DittoMax: dmns.Height = 126; dmns.Width = 81; dmns.Thickness = 14; return dmns; case MediaType.RDX: case MediaType.RDX320: dmns.Height = 119; dmns.Width = 87; dmns.Thickness = 23; return dmns; case MediaType.LS120: case MediaType.LS240: dmns.Height = 94; dmns.Width = 90; dmns.Thickness = 3.5; return dmns; case MediaType.Travan: case MediaType.Travan3: case MediaType.Travan4: case MediaType.Travan5: case MediaType.Travan7: dmns.Height = 72; dmns.Width = 92; dmns.Thickness = 15; return dmns; case MediaType.Travan1Ex: dmns.Height = 0; dmns.Width = 92; dmns.Thickness = 15; return dmns; case MediaType.Travan3Ex: dmns.Height = 0; dmns.Width = 92; dmns.Thickness = 15; return dmns; case MediaType.ADR2120: case MediaType.ADR260: case MediaType.ADR30: case MediaType.ADR50: dmns.Height = 129; dmns.Width = 93; dmns.Thickness = 14.5; return dmns; case MediaType.Data8: case MediaType.AIT1: case MediaType.AIT1Turbo: case MediaType.AIT2: case MediaType.AIT2Turbo: case MediaType.AIT3: case MediaType.AIT3Ex: case MediaType.AIT3Turbo: case MediaType.AIT4: case MediaType.AIT5: case MediaType.AITETurbo: case MediaType.Exatape106m: case MediaType.Exatape160mXL: case MediaType.Exatape112m: case MediaType.Exatape125m: case MediaType.Exatape150m: case MediaType.Exatape15m: case MediaType.Exatape170m: case MediaType.Exatape225m: case MediaType.Exatape22m: case MediaType.Exatape22mAME: case MediaType.Exatape28m: case MediaType.Exatape40m: case MediaType.Exatape45m: case MediaType.Exatape54m: case MediaType.Exatape75m: case MediaType.Exatape76m: case MediaType.Exatape80m: dmns.Height = 62.5; dmns.Width = 95; dmns.Thickness = 15; return dmns; case MediaType.EZ135: case MediaType.EZ230: case MediaType.SQ327: dmns.Height = 97; dmns.Width = 98; dmns.Thickness = 9.5; return dmns; case MediaType.SQ400: case MediaType.SQ800: case MediaType.SQ2000: dmns.Height = 137; dmns.Width = 137; dmns.Thickness = 12; return dmns; case MediaType.ZIP100: case MediaType.ZIP250: case MediaType.ZIP750: dmns.Height = 98.5; dmns.Width = 98; dmns.Thickness = 6.5; return dmns; case MediaType.Jaz: case MediaType.Jaz2: dmns.Height = 102; dmns.Width = 98; dmns.Thickness = 12; return dmns; case MediaType.Orb: case MediaType.Orb5: dmns.Height = 104; dmns.Width = 98; dmns.Thickness = 8; return dmns; case MediaType.SparQ: dmns.Height = 98; dmns.Width = 100; dmns.Thickness = 9.7; return dmns; case MediaType.ProfessionalDisc: case MediaType.ProfessionalDiscDual: case MediaType.ProfessionalDiscTriple: case MediaType.ProfessionalDiscQuad: case MediaType.PDD: case MediaType.PDD_WORM: dmns.Height = 130; dmns.Width = 128.5; dmns.Thickness = 9; return dmns; case MediaType.SLR1: case MediaType.SLR2: case MediaType.SLR3: case MediaType.SLR32: case MediaType.SLR32SL: case MediaType.SLR4: case MediaType.SLR5: case MediaType.SLR5SL: case MediaType.SLR6: case MediaType.SLRtape100: case MediaType.SLRtape140: case MediaType.SLRtape24: case MediaType.SLRtape24SL: case MediaType.SLRtape40: case MediaType.SLRtape50: case MediaType.SLRtape60: case MediaType.SLRtape7: case MediaType.SLRtape75: case MediaType.SLRtape7SL: dmns.Height = 150; dmns.Width = 100; dmns.Thickness = 18; return dmns; case MediaType.N64DD: dmns.Height = 103.124; dmns.Width = 101.092; dmns.Thickness = 10.16; return dmns; case MediaType.CompactTapeI: case MediaType.CompactTapeII: case MediaType.DLTtapeIII: case MediaType.DLTtapeIIIxt: case MediaType.DLTtapeIV: case MediaType.DLTtapeS4: case MediaType.SDLT1: case MediaType.SDLT2: case MediaType.VStapeI: dmns.Height = 105; dmns.Width = 105; dmns.Thickness = 25; return dmns; case MediaType.LTO: case MediaType.LTO2: case MediaType.LTO3: case MediaType.LTO3WORM: case MediaType.LTO4: case MediaType.LTO4WORM: case MediaType.LTO5: case MediaType.LTO5WORM: case MediaType.LTO6: case MediaType.LTO6WORM: case MediaType.LTO7: case MediaType.LTO7WORM: dmns.Height = 101.6; dmns.Width = 105.41; dmns.Thickness = 21.59; return dmns; case MediaType.IBM3480: case MediaType.IBM3490: case MediaType.IBM3490E: case MediaType.IBM3592: dmns.Height = 125.73; dmns.Width = 107.95; dmns.Thickness = 25.4; return dmns; case MediaType.T9840A: case MediaType.T9840B: case MediaType.T9840C: case MediaType.T9840D: case MediaType.T9940A: case MediaType.T9940B: dmns.Height = 124.46; dmns.Width = 109.22; dmns.Thickness = 25.4; return dmns; case MediaType.CompactCassette: case MediaType.Dcas25: case MediaType.Dcas85: case MediaType.Dcas103: dmns.Height = 63.5; dmns.Width = 128; dmns.Thickness = 12; return dmns; case MediaType.IBM3470: dmns.Height = 58.42; dmns.Width = 137.16; dmns.Thickness = 16.51; return dmns; case MediaType.MLR1: case MediaType.MLR3: case MediaType.MLR1SL: dmns.Height = 101.6; dmns.Width = 152.4; dmns.Thickness = 15.24; return dmns; case MediaType.QIC11: case MediaType.QIC120: case MediaType.QIC1350: case MediaType.QIC150: case MediaType.QIC24: case MediaType.QIC525: dmns.Height = 101.6; dmns.Width = 154.2; dmns.Thickness = 16.6; return dmns; case MediaType.Bernoulli: case MediaType.Bernoulli10: case MediaType.Bernoulli20: dmns.Height = 280; dmns.Width = 209; dmns.Thickness = 18; return dmns; case MediaType.Bernoulli2: case MediaType.BernoulliBox2_20: case MediaType.Bernoulli35: case MediaType.Bernoulli44: case MediaType.Bernoulli65: case MediaType.Bernoulli90: case MediaType.Bernoulli105: case MediaType.Bernoulli150: case MediaType.Bernoulli230: dmns.Height = 138; dmns.Width = 136; dmns.Thickness = 9; return dmns; case MediaType.DTF: case MediaType.DTF2: dmns.Height = 144.78; dmns.Width = 254; dmns.Thickness = 25.4; return dmns; case MediaType.LD: case MediaType.LDROM: case MediaType.LDROM2: case MediaType.MegaLD: case MediaType.LVROM: dmns.Diameter = 300; dmns.Thickness = 2.5; return dmns; case MediaType.CRVdisc: dmns.Height = 344; dmns.Width = 325; dmns.Thickness = 15.6; return dmns; case MediaType.REV35: case MediaType.REV70: case MediaType.REV120: dmns.Height = 74.8; dmns.Width = 76.8; dmns.Thickness = 10; return dmns; #region CD/DVD/BD case MediaType.CDDA: case MediaType.CDG: case MediaType.CDEG: case MediaType.CDI: case MediaType.CDROM: case MediaType.CDROMXA: case MediaType.CDPLUS: case MediaType.CDMO: case MediaType.CDR: case MediaType.CDRW: case MediaType.CDMRW: case MediaType.VCD: case MediaType.SVCD: case MediaType.PCD: case MediaType.SACD: case MediaType.DDCD: case MediaType.DDCDR: case MediaType.DDCDRW: case MediaType.DTSCD: case MediaType.CDMIDI: case MediaType.CDV: case MediaType.CD: case MediaType.DVDROM: case MediaType.DVDR: case MediaType.DVDRW: case MediaType.DVDPR: case MediaType.DVDPRW: case MediaType.DVDPRWDL: case MediaType.DVDRDL: case MediaType.DVDPRDL: case MediaType.DVDRAM: case MediaType.DVDRWDL: case MediaType.DVDDownload: case MediaType.HDDVDROM: case MediaType.HDDVDRAM: case MediaType.HDDVDR: case MediaType.HDDVDRW: case MediaType.HDDVDRDL: case MediaType.HDDVDRWDL: case MediaType.BDROM: case MediaType.BDR: case MediaType.BDRE: case MediaType.BDRXL: case MediaType.BDREXL: case MediaType.PS1CD: case MediaType.PS2CD: case MediaType.PS2DVD: case MediaType.PS3DVD: case MediaType.PS3BD: case MediaType.PS4BD: case MediaType.PS5BD: case MediaType.XGD: case MediaType.XGD2: case MediaType.XGD3: case MediaType.XGD4: case MediaType.MEGACD: case MediaType.SATURNCD: case MediaType.GDROM: case MediaType.GDR: case MediaType.SuperCDROM2: case MediaType.JaguarCD: case MediaType.ThreeDO: case MediaType.WOD: case MediaType.WUOD: case MediaType.PCFX: case MediaType.CDIREADY: case MediaType.FMTOWNS: case MediaType.CDTV: case MediaType.CD32: case MediaType.Nuon: case MediaType.Playdia: case MediaType.Pippin: case MediaType.MilCD: case MediaType.CVD: case MediaType.UHDBD: dmns.Diameter = 120; dmns.Thickness = 1.2; return dmns; case MediaType.GOD: dmns.Diameter = 80; dmns.Thickness = 1.2; return dmns; case MediaType.VideoNow: dmns.Diameter = 85; dmns.Thickness = 1.2; return dmns; case MediaType.VideoNowColor: case MediaType.VideoNowXp: dmns.Diameter = 108; dmns.Thickness = 1.2; return dmns; #endregion CD/DVD/BD #region Apple Hard Disks // TODO: Find Apple Widget size case MediaType.AppleProfile: dmns.Height = 223.8; dmns.Width = 438.9; dmns.Thickness = 111.5; return dmns; case MediaType.AppleHD20: dmns.Height = 246.4; dmns.Width = 266.7; dmns.Thickness = 78.7; return dmns; #endregion Apple Hard Disks case MediaType.UMD: dmns.Height = 64; dmns.Width = 63; dmns.Thickness = 4; return dmns; case MediaType.HF12: case MediaType.HF24: dmns.Height = 137.5; dmns.Width = 135.9; dmns.Thickness = 5.64; return dmns; default: return null; } } }