From 47561baee8fb338cfbea5530abc22a9eadbccc48 Mon Sep 17 00:00:00 2001 From: Deterous <138427222+Deterous@users.noreply.github.com> Date: Wed, 3 Apr 2024 11:02:05 +0900 Subject: [PATCH] Detect Xbox Series X discs (#683) * Detect Xbox Series X discs via catalog.js deserialization * Update changelog --- CHANGELIST.md | 1 + MPF.Core/Data/Drive.cs | 43 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/CHANGELIST.md b/CHANGELIST.md index 7e9ef13c..7fa7ca6c 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -11,6 +11,7 @@ - Fix information pulling for redumper (fuzz6001) - Update packages - Update BinaryObjectScanner to 3.1.4 +- Detect Xbox Series X discs (Deterous) ### 3.1.4 (2024-03-16) diff --git a/MPF.Core/Data/Drive.cs b/MPF.Core/Data/Drive.cs index 8763b8c4..e8f19c8c 100644 --- a/MPF.Core/Data/Drive.cs +++ b/MPF.Core/Data/Drive.cs @@ -369,17 +369,44 @@ namespace MPF.Core.Data } catch { } - // Microsoft Xbox One + // Microsoft Xbox One and Series X try { - if (Directory.Exists(Path.Combine(this.Name, "MSXC")) -#if NET20 || NET35 - && Directory.GetFiles(Path.Combine(this.Name, "MSXC")).Any()) -#else - && Directory.EnumerateFiles(Path.Combine(this.Name, "MSXC")).Any()) -#endif + if (Directory.Exists(Path.Combine(this.Name, "MSXC"))) { - return RedumpSystem.MicrosoftXboxOne; + try + { +#if NET20 || NET35 + string catalogjs = Path.Combine(this.Name, Path.Combine("MSXC", Path.Combine("Metadata", "catalog.js"))); +#else + string catalogjs = Path.Combine(this.Name, "MSXC", "Metadata", "catalog.js"); +#endif + if (!File.Exists(catalogjs)) + return RedumpSystem.MicrosoftXboxOne; + + var deserializer = new SabreTools.Serialization.Files.Catalog(); + SabreTools.Models.Xbox.Catalog? catalog = deserializer.Deserialize(catalogjs); + if (catalog != null && catalog.Version != null && catalog.Packages != null) + { + if (!double.TryParse(catalog.Version, out double version)) + return RedumpSystem.MicrosoftXboxOne; + + if (version < 4) + return RedumpSystem.MicrosoftXboxOne; + + foreach (var package in catalog.Packages) + { + if (package.Generation != "9") + return RedumpSystem.MicrosoftXboxOne; + } + + return RedumpSystem.MicrosoftXboxSeriesXS; + } + } + catch + { + return RedumpSystem.MicrosoftXboxOne; + } } } catch { }