using System.IO; using System.Text; using static SabreTools.Data.Models.Xbox.Constants; namespace SabreTools.Wrappers { public partial class XMID : WrapperBase { #region Descriptive Properties /// public override string DescriptionString => "Xbox Media Identifier"; #endregion #region Extension Properties /// /// Get the human-readable publisher string /// public string Publisher { get { // Use the cached data if possible if (field is not null) return field; if (Publishers.TryGetValue(Model.PublisherIdentifier, out var publisher)) { field = publisher; return field; } field = $"Unknown ({Model.PublisherIdentifier})"; return field; } } = null; /// /// Get the human-readable region string /// public string Region { get { // Use the cached data if possible if (field is not null) return field; if (Regions.TryGetValue(Model.RegionIdentifier, out var region)) { field = region; return field; } field = $"Unknown ({Model.RegionIdentifier})"; return field; } } = null; /// /// Get the human-readable serial string /// public string Serial => $"{Model.PublisherIdentifier}-{Model.GameID}"; /// /// Get the human-readable version string /// public string Version => $"1.{Model.VersionNumber}"; #endregion #region Constructors /// public XMID(Data.Models.Xbox.XMID model, byte[] data) : base(model, data) { } /// public XMID(Data.Models.Xbox.XMID model, byte[] data, int offset) : base(model, data, offset) { } /// public XMID(Data.Models.Xbox.XMID model, byte[] data, int offset, int length) : base(model, data, offset, length) { } /// public XMID(Data.Models.Xbox.XMID model, Stream data) : base(model, data) { } /// public XMID(Data.Models.Xbox.XMID model, Stream data, long offset) : base(model, data, offset) { } /// public XMID(Data.Models.Xbox.XMID model, Stream data, long offset, long length) : base(model, data, offset, length) { } #endregion #region Static Constructors /// /// Create a XMID from a string /// /// String representing the data /// A XMID wrapper on success, null on failure public static XMID? Create(string? data) { // If the data is invalid if (data is null || data.Length == 0) return null; try { var model = new Serialization.Readers.XMID().Deserialize(data); if (model is null) return null; var ms = new MemoryStream(Encoding.ASCII.GetBytes(data)); return new XMID(model, ms); } catch { return null; } } #endregion } }