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 { }