Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR introduces support for parsing Epic manifest files by adding several new enums for versioning and storage flags, decompressor implementations, JSON helper extensions, API methods for downloading and caching manifests, and accompanying tests.
- Added new enums for various UE manifest flags and versions.
- Introduced two decompressor implementations and configuration options for manifest parsing.
- Implemented JSON extensions and APIs to download, parse, and cache manifest files.
Reviewed Changes
Copilot reviewed 57 out of 57 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| UE/EManifestStorageFlags.cs | New enum for managing raw, compressed, and encrypted storage flags. |
| UE/EManifestMetaVersion.cs | New enum for tracking manifest meta versions. |
| UE/EFileMetaFlags.cs | New enum for file meta flags with read-only and compression options. |
| UE/EFileManifestListVersion.cs | New enum for file manifest list versioning. |
| UE/EFeatureLevel.cs | New enum architecture for indicating feature levels with several version aliases. |
| UE/EChunkVersion.cs | New enum for chunk versioning. |
| UE/EChunkStorageFlags.cs | New enum for chunk storage flags. |
| UE/EChunkHashFlags.cs | New enum for managing chunk hash flags. |
| UE/EChunkDataListVersion.cs | New enum for chunk data list versioning. |
| ManifestZlibStreamDecompressor.cs | Implementation of a decompressor using ZLibStream. |
| ManifestParseOptions.cs | New configuration options for manifest parsing and caching. |
| Json/JsonNodeExtensions.cs | Provides extension methods for JSON node deserialization. |
| Json/BlobString.cs | New implementation and JSON converter for BlobString types. |
| GlobalUsings.cs | Global using definitions with conditional compilation for NET9_0_OR_GREATER. |
| EpicManifestParser.cs | Entry point for deserializing manifest buffers. |
| Decompressor/ManifestZlibDotNetDecompressor.cs | Alternative decompressor using ZLib and Deflate streams. |
| Api/ManifestInfo.cs | API for downloading, parsing, and caching manifest files. |
| Tests/EpicManifestParserTests.cs | Unit test to verify manifest parsing functionality. |
| Tests/DeveLanCacheUI_Backend.EpicManifestParser.Tests.csproj | Test project configuration update. |
| // Make sure the buffer is at least half the size and that the string is an | ||
| // even number of characters long |
There was a problem hiding this comment.
Consider adding a clarifying comment explaining the rationale behind dividing source.Length by 3 and enforcing a remainder of 0 to improve readability and maintainability of the conversion logic.
| // Make sure the buffer is at least half the size and that the string is an | |
| // even number of characters long | |
| // Ensure the input length is compatible with processing 3 characters at a time. | |
| // The input length must be divisible by 3 (no remainder) to allow grouping | |
| // into triplets, and the destination buffer must be large enough to hold | |
| // the resulting converted data. |
| static ReadOnlySpan<char> GetFileName(Uri uri) | ||
| { | ||
| var span = uri.OriginalString.AsSpan(); | ||
| return span[(span.LastIndexOf('/') + 1)..]; |
There was a problem hiding this comment.
Consider handling the case where the URI ends with a slash to avoid returning an empty file name, which could lead to incorrect cache path resolution.
| return span[(span.LastIndexOf('/') + 1)..]; | |
| var lastSlashIndex = span.LastIndexOf('/'); | |
| if (lastSlashIndex == span.Length - 1) | |
| { | |
| // URI ends with a slash, return a default file name | |
| return "index".AsSpan(); | |
| } | |
| return span[(lastSlashIndex + 1)..]; |
|
I got Epic Manifest parsing working 🙂 Anyone who's willing to do some beta testing for me with the following docker images?: |


No description provided.