From feeff8cc3e2203ca57eff0ee1d024ad39a1e3d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Fri, 6 Jun 2025 16:55:25 +0200 Subject: [PATCH] feat: file size --- src/console/main.zig | 28 ++++++++++++++++++++++++++++ src/core/models.zig | 1 + src/core/provider/local.zig | 14 +++++++++++--- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/console/main.zig b/src/console/main.zig index 89e1e29..29f7466 100644 --- a/src/console/main.zig +++ b/src/console/main.zig @@ -379,6 +379,34 @@ const Model = struct { }, }; + const padding = try ctx.arena.create(vxfw.Padding); + padding.* = .{ + .child = container_child_number_element.widget(), + .padding = vxfw.Padding.horizontal(1), + .fill = .{ + .style = .{ + .bg = bg, + .fg = fg, + }, + }, + }; + try item_children_list.append(.{ + .widget = try draw_context.fromWidget(padding.widget(), draw_context.maxHeight1, ctx.arena), + .flex = 0, + }); + } else if (child.item == .element) { + const element = child.item.element; + + const container_child_number_text = try std.fmt.allocPrint(ctx.arena, "{:.1}", .{std.fmt.fmtIntSizeBin(element.content_size)}); + const container_child_number_element = try ctx.arena.create(vxfw.Text); + container_child_number_element.* = vxfw.Text{ + .text = container_child_number_text, + .style = .{ + .bg = bg, + .fg = fg, + }, + }; + const padding = try ctx.arena.create(vxfw.Padding); padding.* = .{ .child = container_child_number_element.widget(), diff --git a/src/core/models.zig b/src/core/models.zig index 29ea3e8..200e523 100644 --- a/src/core/models.zig +++ b/src/core/models.zig @@ -39,6 +39,7 @@ pub const ItemEnum = union(enum) { pub const Element = struct { item: Item, + content_size: u64, fn deinit(self: *Element) void { self.item.allocator.destroy(self); diff --git a/src/core/provider/local.zig b/src/core/provider/local.zig index b6a0d3d..f47b13c 100644 --- a/src/core/provider/local.zig +++ b/src/core/provider/local.zig @@ -89,7 +89,10 @@ pub const LocalContentProvider = struct { const native_path = try getNativePathByFullName(allocator, fullName); defer allocator.free(native_path); - const kind: union(enum) { directory, file } = blk: { + const kind: union(enum) { + directory, + file: struct { size: u64 }, + } = blk: { // FIXME: properly handle different errors var dir = std.fs.cwd().openDir(native_path, .{}); if (dir) |*d| { @@ -99,8 +102,12 @@ pub const LocalContentProvider = struct { var file = std.fs.cwd().openFile(native_path, .{}); if (file) |*f| { + const size = size: { + const stat = f.stat() catch break :size 0; + break :size stat.size; + }; f.close(); - break :blk .file; + break :blk .{ .file = .{ .size = size } }; } else |_| {} return GetItemsError.NotExists; @@ -136,10 +143,11 @@ pub const LocalContentProvider = struct { break :blk &container.item; }, - .file => blk: { + .file => |file| blk: { const element = try allocator.create(Element); element.* = Element{ .item = undefined, + .content_size = file.size, }; const val: ItemEnum = .{