From 1a2e9fb942c1239f25d2b3baaaf2232d87b4024e Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 4 Apr 2024 14:15:27 -0400 Subject: [PATCH] Add PlayJ playlist wrapper --- SabreTools.Serialization/Wrappers/MoPaQ.cs | 6 +- SabreTools.Serialization/Wrappers/PIC.cs | 6 +- .../Wrappers/PlayJAudioFile.cs | 4 +- .../Wrappers/PlayJPlaylist.cs | 78 +++++++++++++++++++ 4 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 SabreTools.Serialization/Wrappers/PlayJPlaylist.cs diff --git a/SabreTools.Serialization/Wrappers/MoPaQ.cs b/SabreTools.Serialization/Wrappers/MoPaQ.cs index 89a9822f..57659de2 100644 --- a/SabreTools.Serialization/Wrappers/MoPaQ.cs +++ b/SabreTools.Serialization/Wrappers/MoPaQ.cs @@ -60,13 +60,13 @@ namespace SabreTools.Serialization.Wrappers if (data == null || data.Length == 0 || !data.CanSeek || !data.CanRead) return null; - var cabinet = Deserializers.MoPaQ.DeserializeStream(data); - if (cabinet == null) + var archive = Deserializers.MoPaQ.DeserializeStream(data); + if (archive == null) return null; try { - return new MoPaQ(cabinet, data); + return new MoPaQ(archive, data); } catch { diff --git a/SabreTools.Serialization/Wrappers/PIC.cs b/SabreTools.Serialization/Wrappers/PIC.cs index c9669fc9..ea59ce5d 100644 --- a/SabreTools.Serialization/Wrappers/PIC.cs +++ b/SabreTools.Serialization/Wrappers/PIC.cs @@ -60,13 +60,13 @@ namespace SabreTools.Serialization.Wrappers if (data == null || data.Length == 0 || !data.CanSeek || !data.CanRead) return null; - var archive = Deserializers.PIC.DeserializeStream(data); - if (archive == null) + var info = Deserializers.PIC.DeserializeStream(data); + if (info == null) return null; try { - return new PIC(archive, data); + return new PIC(info, data); } catch { diff --git a/SabreTools.Serialization/Wrappers/PlayJAudioFile.cs b/SabreTools.Serialization/Wrappers/PlayJAudioFile.cs index 5acd88ce..59512058 100644 --- a/SabreTools.Serialization/Wrappers/PlayJAudioFile.cs +++ b/SabreTools.Serialization/Wrappers/PlayJAudioFile.cs @@ -30,7 +30,7 @@ namespace SabreTools.Serialization.Wrappers /// /// Create a PlayJ audio file from a byte array and offset /// - /// Byte array representing the archive + /// Byte array representing the audio file /// Offset within the array to parse /// A PlayJ audio file wrapper on success, null on failure public static PlayJAudioFile? Create(byte[]? data, int offset) @@ -51,7 +51,7 @@ namespace SabreTools.Serialization.Wrappers /// /// Create a PlayJ audio file from a Stream /// - /// Stream representing the archive + /// Stream representing the audio file /// A PlayJ audio file wrapper on success, null on failure public static PlayJAudioFile? Create(Stream? data) { diff --git a/SabreTools.Serialization/Wrappers/PlayJPlaylist.cs b/SabreTools.Serialization/Wrappers/PlayJPlaylist.cs new file mode 100644 index 00000000..086acaee --- /dev/null +++ b/SabreTools.Serialization/Wrappers/PlayJPlaylist.cs @@ -0,0 +1,78 @@ +using System.IO; + +namespace SabreTools.Serialization.Wrappers +{ + public class PlayJPlaylist : WrapperBase + { + #region Descriptive Properties + + /// + public override string DescriptionString => "PlayJ Playlist"; + + #endregion + + #region Constructors + + /// + public PlayJPlaylist(Models.PlayJ.Playlist? model, byte[]? data, int offset) + : base(model, data, offset) + { + // All logic is handled by the base class + } + + /// + public PlayJPlaylist(Models.PlayJ.Playlist? model, Stream? data) + : base(model, data) + { + // All logic is handled by the base class + } + + /// + /// Create a PlayJ playlist from a byte array and offset + /// + /// Byte array representing the playlist + /// Offset within the array to parse + /// A PlayJ playlist wrapper on success, null on failure + public static PlayJPlaylist? Create(byte[]? data, int offset) + { + // If the data is invalid + if (data == null) + return null; + + // If the offset is out of bounds + if (offset < 0 || offset >= data.Length) + return null; + + // Create a memory stream and use that + var dataStream = new MemoryStream(data, offset, data.Length - offset); + return Create(dataStream); + } + + /// + /// Create a PlayJ playlist from a Stream + /// + /// Stream representing the playlist + /// A PlayJ playlist wrapper on success, null on failure + public static PlayJPlaylist? Create(Stream? data) + { + // If the data is invalid + if (data == null || data.Length == 0 || !data.CanSeek || !data.CanRead) + return null; + + var playlist = Deserializers.PlayJPlaylist.DeserializeStream(data); + if (playlist == null) + return null; + + try + { + return new PlayJPlaylist(playlist, data); + } + catch + { + return null; + } + } + + #endregion + } +} \ No newline at end of file