From 39f9d9a86d469c59a784ec4e0a54c3ea10104fca Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 19 Apr 2022 20:25:36 -0700 Subject: [PATCH] Add optical media support method (.NET 6) --- CHANGELIST.md | 1 + MPF.Core/Data/Drive.cs | 81 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/CHANGELIST.md b/CHANGELIST.md index e0a794fb..ea26a067 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -83,6 +83,7 @@ - Use Aaru for media type retrival (.NET 6) - Fix CD-R multisession info - Better get drive list (.NET 6) +- Add optical media support method (.NET 6) ### 2.3 (2022-02-05) - Start overhauling Redump information pulling, again diff --git a/MPF.Core/Data/Drive.cs b/MPF.Core/Data/Drive.cs index 2da1cd5b..d825036e 100644 --- a/MPF.Core/Data/Drive.cs +++ b/MPF.Core/Data/Drive.cs @@ -695,6 +695,87 @@ namespace MPF.Core.Data return false; } + /// + /// Get supported media types for a drive + /// + /// Bytes representing the field to check + /// List of supported media types, null on error + private static List OpticalMediaSupport(byte[] featureBytes) + { + Feature_0000? feature = Features.Decode_0000(featureBytes); + + if (!feature.HasValue) + return null; + + var supportedMediaTypes = new List(); + foreach (Profile prof in feature.Value.Profiles) + { + switch (prof.Number) + { + // Values we don't care about for Optical + case ProfileNumber.Reserved: + case ProfileNumber.NonRemovable: + case ProfileNumber.Removable: + case ProfileNumber.MOErasable: + case ProfileNumber.OpticalWORM: + case ProfileNumber.ASMO: + case ProfileNumber.Unconforming: + break; + + // Every supported optical profile + case ProfileNumber.CDROM: + case ProfileNumber.CDR: + case ProfileNumber.CDRW: + supportedMediaTypes.Add(MediaType.CDROM); + break; + + case ProfileNumber.DVDROM: + case ProfileNumber.DVDRSeq: + case ProfileNumber.DVDRAM: + case ProfileNumber.DVDRWRes: + case ProfileNumber.DVDRWSeq: + case ProfileNumber.DVDRDLSeq: + case ProfileNumber.DVDRDLJump: + case ProfileNumber.DVDRWDL: + case ProfileNumber.DVDDownload: + case ProfileNumber.DVDRWPlus: + case ProfileNumber.DVDRPlus: + case ProfileNumber.DVDRWDLPlus: + case ProfileNumber.DVDRDLPlus: + supportedMediaTypes.Add(MediaType.DVD); + break; + + // TODO: Add DDCD as media type + //case ProfileNumber.DDCDROM: + //case ProfileNumber.DDCDR: + //case ProfileNumber.DDCDRW: + // supportedMediaTypes.Add(MediaType.DDCD); + // break; + + case ProfileNumber.BDROM: + case ProfileNumber.BDRSeq: + case ProfileNumber.BDRRdm: + case ProfileNumber.BDRE: + supportedMediaTypes.Add(MediaType.BluRay); + break; + + case ProfileNumber.HDDVDROM: + case ProfileNumber.HDDVDR: + case ProfileNumber.HDDVDRAM: + case ProfileNumber.HDDVDRW: + case ProfileNumber.HDDVDRDL: + case ProfileNumber.HDDVDRWDL: + case ProfileNumber.HDBURNROM: + case ProfileNumber.HDBURNR: + case ProfileNumber.HDBURNRW: + supportedMediaTypes.Add(MediaType.HDDVD); + break; + } + } + + return supportedMediaTypes.Distinct().ToList(); + } + #endif } }