mirror of
https://github.com/fairyglade/ly.git
synced 2026-06-22 07:22:00 +00:00
Stream dur reading instead of reading all at once
Signed-off-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
@@ -19,25 +19,6 @@ const LogFile = ly_core.LogFile;
|
|||||||
const enums = @import("../enums.zig");
|
const enums = @import("../enums.zig");
|
||||||
const DurOffsetAlignment = enums.DurOffsetAlignment;
|
const DurOffsetAlignment = enums.DurOffsetAlignment;
|
||||||
|
|
||||||
fn readDecompressFile(allocator: Allocator, io: std.Io, file_path: []const u8) ![]u8 {
|
|
||||||
const file_buffer = std.Io.Dir.cwd().openFile(io, file_path, .{}) catch {
|
|
||||||
return error.FileNotFound;
|
|
||||||
};
|
|
||||||
defer file_buffer.close(io);
|
|
||||||
|
|
||||||
var file_reader_buffer: [4096]u8 = undefined;
|
|
||||||
var decompress_buffer: [flate.max_window_len]u8 = undefined;
|
|
||||||
|
|
||||||
var file_reader = file_buffer.reader(io, &file_reader_buffer);
|
|
||||||
var decompress: flate.Decompress = .init(&file_reader.interface, .gzip, &decompress_buffer);
|
|
||||||
|
|
||||||
const file_decompressed = decompress.reader.allocRemaining(allocator, .unlimited) catch {
|
|
||||||
return error.NotValidFile;
|
|
||||||
};
|
|
||||||
|
|
||||||
return file_decompressed;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Frame = struct {
|
const Frame = struct {
|
||||||
frameNumber: i32,
|
frameNumber: i32,
|
||||||
delay: f32,
|
delay: f32,
|
||||||
@@ -161,13 +142,22 @@ const DurFormatRaw = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn createFromFile(self: *DurFormatRaw, allocator: Allocator, io: std.Io, file_path: []const u8) !void {
|
pub fn createFromFile(self: *DurFormatRaw, allocator: Allocator, io: std.Io, file_path: []const u8) !void {
|
||||||
const file_decompressed = try readDecompressFile(allocator, io, file_path);
|
const file = try std.Io.Dir.cwd().openFile(io, file_path, .{});
|
||||||
defer allocator.free(file_decompressed);
|
defer file.close(io);
|
||||||
|
|
||||||
const parsed = try Json.parseFromSlice(Json.Value, allocator, file_decompressed, .{});
|
var reader_buffer: [4096]u8 = undefined;
|
||||||
defer parsed.deinit();
|
var decompress_buffer: [flate.max_window_len]u8 = undefined;
|
||||||
|
|
||||||
try parseFromJson(self, allocator, parsed.value);
|
var file_reader = file.reader(io, &reader_buffer);
|
||||||
|
var decompress: flate.Decompress = .init(&file_reader.interface, .gzip, &decompress_buffer);
|
||||||
|
|
||||||
|
var json_reader = Json.Reader.init(allocator, &decompress.reader);
|
||||||
|
defer json_reader.deinit();
|
||||||
|
|
||||||
|
const json = try Json.parseFromTokenSource(Json.Value, allocator, &json_reader, .{});
|
||||||
|
defer json.deinit();
|
||||||
|
|
||||||
|
try parseFromJson(self, allocator, json.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init(allocator: Allocator) DurFormatRaw {
|
pub fn init(allocator: Allocator) DurFormatRaw {
|
||||||
|
|||||||
Reference in New Issue
Block a user