diff --git a/Unity Studio/Unity Studio Classes/UnityStudio.cs b/Unity Studio/Unity Studio Classes/UnityStudio.cs index 1770d8a..44ce170 100644 --- a/Unity Studio/Unity Studio Classes/UnityStudio.cs +++ b/Unity Studio/Unity Studio Classes/UnityStudio.cs @@ -394,7 +394,13 @@ namespace Unity_Studio { return FileType.WebFile; } - + reader.Position = 0x20; + magic = reader.ReadBytes(6); + reader.Position = 0; + if (WebFile.brotliMagic.SequenceEqual(magic)) + { + return FileType.WebFile; + } return FileType.AssetsFile; } } diff --git a/Unity Studio/Unity Studio Classes/WebFile.cs b/Unity Studio/Unity Studio Classes/WebFile.cs index 5fdb8f3..04873c6 100644 --- a/Unity Studio/Unity Studio Classes/WebFile.cs +++ b/Unity Studio/Unity Studio Classes/WebFile.cs @@ -4,12 +4,14 @@ using System.IO; using System.IO.Compression; using System.Linq; using System.Text; +using BrotliSharpLib; namespace Unity_Studio { public class WebFile { public static byte[] gzipMagic = { 0x1f, 0x8b }; + public static byte[] brotliMagic = { 0x62, 0x72, 0x6F, 0x74, 0x6C, 0x69 }; public List fileList = new List(); @@ -28,9 +30,9 @@ namespace Unity_Studio if (gzipMagic.SequenceEqual(magic)) { var stream = new MemoryStream(); - using (var gstream = new GZipStream(reader.BaseStream, CompressionMode.Decompress)) + using (var gs = new GZipStream(reader.BaseStream, CompressionMode.Decompress)) { - gstream.CopyTo(stream); + gs.CopyTo(stream); } stream.Position = 0; using (reader = new EndianBinaryReader(stream, EndianType.LittleEndian)) @@ -40,8 +42,24 @@ namespace Unity_Studio } else { - reader.endian = EndianType.LittleEndian; - ReadUnityWebData(reader); + reader.Position = 0x20; + magic = reader.ReadBytes(6); + reader.Position = 0; + if (brotliMagic.SequenceEqual(magic)) + { + var buff = reader.ReadBytes((int)reader.BaseStream.Length); + var uncompressedData = Brotli.DecompressBuffer(buff, 0, buff.Length); + var stream = new MemoryStream(uncompressedData); + using (reader = new EndianBinaryReader(stream, EndianType.LittleEndian)) + { + ReadUnityWebData(reader); + } + } + else + { + reader.endian = EndianType.LittleEndian; + ReadUnityWebData(reader); + } } } diff --git a/Unity Studio/Unity Studio-x86.csproj b/Unity Studio/Unity Studio-x86.csproj index 9f9cf52..f57a50a 100644 --- a/Unity Studio/Unity Studio-x86.csproj +++ b/Unity Studio/Unity Studio-x86.csproj @@ -55,6 +55,11 @@ MinimumRecommendedRules.ruleset + + False + library\BrotliSharpLib.dll + False + False library\OpenTK.dll @@ -187,7 +192,7 @@ - + Form diff --git a/Unity Studio/Unity Studio.csproj b/Unity Studio/Unity Studio.csproj index 06e41a2..29217a6 100644 --- a/Unity Studio/Unity Studio.csproj +++ b/Unity Studio/Unity Studio.csproj @@ -55,6 +55,11 @@ OnBuildSuccess + + False + library\BrotliSharpLib.dll + False + False library\OpenTK.dll diff --git a/Unity Studio/library/BrotliSharpLib.dll b/Unity Studio/library/BrotliSharpLib.dll new file mode 100644 index 0000000..46933c4 Binary files /dev/null and b/Unity Studio/library/BrotliSharpLib.dll differ