From cd855ba7db79c77b21f48861d1680daf02d57e9a Mon Sep 17 00:00:00 2001 From: jvyden Date: Sun, 31 Oct 2021 23:49:04 -0400 Subject: [PATCH] Add jpeg to supported filetypes --- ProjectLighthouse/Helpers/FileHelper.cs | 23 ++++++++++++++++---- ProjectLighthouse/Types/Files/LbpFileType.cs | 1 + 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/ProjectLighthouse/Helpers/FileHelper.cs b/ProjectLighthouse/Helpers/FileHelper.cs index fbb23117..2b05f6f1 100644 --- a/ProjectLighthouse/Helpers/FileHelper.cs +++ b/ProjectLighthouse/Helpers/FileHelper.cs @@ -26,6 +26,7 @@ namespace LBPUnion.ProjectLighthouse.Helpers LbpFileType.Level => true, LbpFileType.Voice => true, LbpFileType.Plan => true, + LbpFileType.Jpeg => true, #if DEBUG _ => throw new ArgumentOutOfRangeException(nameof(file), $"Unhandled file type ({file.FileType}) in FileHelper.IsFileSafe()"), #else @@ -39,9 +40,6 @@ namespace LBPUnion.ProjectLighthouse.Helpers using MemoryStream ms = new(data); using BinaryReader reader = new(ms); - string footer = Encoding.ASCII.GetString(BinaryHelper.ReadLastBytes(reader, 4)); - if (footer == "FARC") return LbpFileType.FileArchive; - byte[] header = reader.ReadBytes(3); return Encoding.ASCII.GetString(header) switch @@ -52,10 +50,27 @@ namespace LBPUnion.ProjectLighthouse.Helpers "VOP" => LbpFileType.Voice, "LVL" => LbpFileType.Level, "PLN" => LbpFileType.Plan, - _ => LbpFileType.Unknown, + _ => determineFileTypePartTwoWeirdName(reader), }; } + private static LbpFileType determineFileTypePartTwoWeirdName(BinaryReader reader) + { + reader.BaseStream.Position = 0; + + // Determine if file is FARC + string footer = Encoding.ASCII.GetString(BinaryHelper.ReadLastBytes(reader, 4)); + if (footer == "FARC") return LbpFileType.FileArchive; + + // Determine if file is JPEG + byte[] header = reader.ReadBytes(9); + + if (header[0] == 0xFF && header[1] == 0xD8 && header[2] == 0xFF && header[3] == 0xE0) + return LbpFileType.Jpeg; + + return LbpFileType.Unknown; // Still unknown. + } + public static bool ResourceExists(string hash) => File.Exists(GetResourcePath(hash)); public static void EnsureDirectoryCreated(string path) diff --git a/ProjectLighthouse/Types/Files/LbpFileType.cs b/ProjectLighthouse/Types/Files/LbpFileType.cs index 871aac91..abf4de65 100644 --- a/ProjectLighthouse/Types/Files/LbpFileType.cs +++ b/ProjectLighthouse/Types/Files/LbpFileType.cs @@ -9,6 +9,7 @@ namespace LBPUnion.ProjectLighthouse.Types.Files Plan, // PLN, uploaded with levels Voice, // VOP, voice data Painting, // PTG, paintings + Jpeg, // JFIF / FIF, used in sticker switches Unknown, } } \ No newline at end of file